Ошибка типа: объект ‘instancemethod’ не имеет атрибута ‘ __getitem__’ при запуске scrapy spider

#python-2.7 #web-scraping #scrapy #web-crawler #scrapy-spider

#python-2.7 #очистка веб-страниц #веб-сканер #scrapy

Вопрос:

Я получил эту ошибку при запуске scrapy project my 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 
  

и мой конвейер.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

Комментарии:

1. Пожалуйста, опубликуйте свой результат трассировки, строки до (и включая TypeError строку)

Ответ №1:

Вы неправильно вызываете extract, для каждого извлечения вы должны фактически вызвать метод, а затем проиндексировать его:

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

Если вам нужен только первый элемент, вы можете просто использовать extract_first .

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