При очистке с получением метода экземпляра ошибки нет атрибута '__getitem__'

Я не мог понять, что получаю эту ошибку -> метод экземпляра не имеет атрибута getitem. Я просто пытаюсь очистить этот сайт, чтобы извлечь названия отделов.

import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.selector import Selector
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from urlparse import urljoin
from amazon.items import AmazonItem

class delhiveryspider(CrawlSpider):
    name = "amazon"
    allowed_domains = ["amazon.in"]
    start_urls = ["http://www.amazon.in"]


    def parse(self,response):
        sites = response.xpath('//div[@id="nav_browse_flyout"]')
        items = []

        for site in sites:
            item = AmazonItem()
            item['main_title'] = site.xpath('.//li[@id="nav_cat_0"]/text()').extract[0]
            items.append(item)
        return items

person Nikhil Parmar    schedule 27.01.2015    source источник


Ответы (1)


Вам нужно позвонить extract(), а затем получить первый элемент:

item['main_title'] = site.xpath('.//li[@id="nav_cat_0"]/text()').extract()[0]
#                                                                  HERE ^

Если вы хотите создать отдельную категорию для каждого элемента, перебирайте их:

for title in site.xpath('.//li[starts-with(@id, "nav_cat_")]/text()').extract():
    item = AmazonItem()
    item['main_title'] = title
    items.append(item)
person alecxe    schedule 27.01.2015
comment
Эй, вы можете сказать мне, почему он извлекает только один список, почему не извлекаются все категории ?? - person Nikhil Parmar; 27.01.2015
comment
когда я удаляю [0] после извлечения, я могу получить список, но не при его использовании, почему? - person Nikhil Parmar; 27.01.2015
comment
@NikhilParmar .//li[@id="nav_cat_0"]/text() соответствует нескольким категориям, тогда вы используете синтаксис [0], вы получаете только первую категорию из списка .. - person alecxe; 27.01.2015
comment
но они входят в одно поле, я хочу разделить их и извлечь все поле по отдельности и их соответствующие подполя. - person Nikhil Parmar; 27.01.2015
comment
@NikhilParmar, если я правильно вас понял, вы хотите иметь отдельный элемент для каждой категории / заголовка - см. Обновленный ответ. Надеюсь, это то, о чем вы спрашиваете. - person alecxe; 27.01.2015
comment
см. amazon.in, у них есть все категории, я хочу выделить все категории в отдельное поле на листе Excel. По вашему коду я все еще получаю только первые - person Nikhil Parmar; 27.01.2015
comment
@NikhilParmar Я понимаю, о чем вы! Обновлено выражение xpath, используемое внутри селектора. Проверить это. - person alecxe; 27.01.2015
comment
Большое спасибо. Еще одна вещь, которую вы можете сказать мне, где я могу напрямую связаться с проблемой, плз ?? - person Nikhil Parmar; 27.01.2015
comment
@NikhilParmar проще просто задать здесь на SO - я обычно отслеживаю вопросы по тегу Scrapy. Рад, что помог. - person alecxe; 27.01.2015
comment
Можете ли вы проверить мой вопрос - stackoverflow.com/questions/28176779/ - person Nikhil Parmar; 27.01.2015