2016-10-05 3 views
0

Я получил эту ошибку при запуске Scrapy проекта мой spider.py кодTypeError: «instancemethod» объект не имеет атрибута «__getitem__» при запуске Scrapy паука

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 объекта не имеют ошибок атрибута в Джанго, но я хочу, чтобы решение для Scrapy

+0

Пожалуйста, ваши отслеживающий, линии до (и включая 'TypeError' линии) –

ответ

0

Вы не вызывающий экстракта должным образом, для каждого извлечения вы должны фактический вызов метод затем указательного его:

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

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

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

спасибо, что он работает для меня – Tharunkumar

 Смежные вопросы

  • Нет связанных вопросов^_^