Python 刮取时,获取错误实例方法没有属性'__获取项目';

Python 刮取时,获取错误实例方法没有属性'__获取项目';,python,web-scraping,scrapy,web-crawler,scrapy-spider,Python,Web Scraping,Scrapy,Web Crawler,Scrapy Spider,我无法理解我得到了这个错误->实例方法没有属性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 fro

我无法理解我得到了这个错误->实例方法没有属性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

您需要调用
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)

嘿,你能告诉我为什么它只提取一个列表,为什么没有提取所有类别吗???@NikhilParmar
//li[@id=“nav_cat_0”]/text()
匹配多个类别,然后你使用
[0]
语法,你只从列表中获取第一个类别。@NikhilParmar如果我理解正确,您希望每个类别/标题都有一个单独的项目-请查看更新的答案。希望这就是你要问的。@NikhilParmar我明白你的意思了!更新了选择器中使用的xpath表达式。看看。@NikhilParmar更简单的方法是在这里提问,所以-我通常跟踪
Scrapy
标记问题。很高兴这有帮助。