【问题标题】:TypeError: 'instancemethod' object has no attribute' __getitem__' when run scrapy spiderTypeError:'instancemethod'对象在运行scrapy spider时没有属性'__getitem__'
【发布时间】:2016-10-05 14:53:59
【问题描述】:

运行scrapy项目时出现此错误 我的 spider.py 代码是

import scrapy
import re
from tutorial.items import TutorialItem

class tutorialSpider(scrapy.Spider):
    name="tutorial"
    allowed_domain=['examble.com']
    start_urls = ["examble.com/something"]

    def parse(self, response):
        for sel in response.xpath('//*[@id="post-entry"]/div/article'):
            item = TutorialItem()
            item['Title'] = sel.xpath('div[2]/h2/a/text()').extract[0]
            item['MainPageUrl'] = sel.xpath('div[2]/h2/a/@href').extract[0]
            item['Author'] = sel.xpath('div[2]/div/span/a/text()').extract[0]
            request = scrapy.Request(item['MianPageUrl'], callback=self.parseContentDetails)            
            request.meta['item'] = item
            yield request

    def parseContentDetails(self,response):
        item = response.meta['item']
        item['Content'] = response.xpath()
        item['Count'] = response.xpath()
        print type(item)
        return item 

我的 pipeline.py 是

class TutorialPipeline(object):
    def __init__(self):
        #self.setupDBCon()
        #self.createTables()
    def process_item(self, item, spider):
        for key, value in item.iteritems():
            if(isinstance(value, list)):
                if value:
                    templist = []
                    for obj in value:
                        temp = self.stripHTML(obj)
                        templist.append(temp)
                    item[key] = templist
                else:
                    item[key] = ""
            else:
                item[key] = self.stripHTML(value)

        print item.get('Title', '')     
        return item

我的 items.py 是

from scrapy.item import Item, Field

class TutorialItem(Item):
    Title=Field()
    Author = Field()
    MianPageUrl = Field()
    Content=Field()
    Count=Field()

请告诉我这个错误的解决方案。我搜索了很多网站。该网站只告诉 instancemethod 对象在 django 中没有属性错误,但我想要 scrapy 的解决方案

【问题讨论】:

  • 请发布您的回溯,之前的行(包括TypeError 行)

标签: python-2.7 web-scraping scrapy web-crawler scrapy-spider


【解决方案1】:

您没有正确调用提取,对于每个提取,您必须实际调用该方法然后对其进行索引:

item['Title'] = sel.xpath('div[2]/h2/a/text()').extract()[0]
                                                       ^^^

如果你只想要第一个元素,你可以使用 extract_first

 item['Title'] = sel.xpath('div[2]/h2/a/text()').extract_first()

【讨论】:

    猜你喜欢
    • 2017-02-27
    • 2015-02-26
    • 2013-03-17
    • 2017-01-16
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2014-02-17
    相关资源
    最近更新 更多