2014-11-28 4 views
0

Я сделал большой шаг вперед с этим пауком - я просто привык к кодированию и наслаждаюсь каждой минутой этого. Однако, поскольку я изучаю большинство своих программ, это решение проблем. Вот моя текущая ошибка:Успешное лечение, но не выводит никакой информации?

Мой паук показывает все данные, которые я хочу в окне терминала. Когда я иду на выход, ничего не появляется. Вот мой код.

import re 
import json 
from urlparse import urlparse 


from scrapy.selector import Selector 
try: 
    from scrapy.spider import Spider 
except: 
    from scrapy.spider import BaseSpider as Spider 
from scrapy.utils.response import get_base_url 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors import LinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from database.items import databaseItem 

from scrapy.log import * 

class CommonSpider(CrawlSpider): 
    name = 'fenders.py' 
    allowed_domains = ['usedprice.com'] 
    start_urls = ['http://www.usedprice.com/items/guitars-musical-instruments/fender/?ob=model_asc#results'] 

    rules = (

     Rule(LinkExtractor(allow=()), callback='parse_item'), 
    ) 


    def parse_item(self, response): 
     hxs = HtmlXPathSelector(response) 
     item = [] 
     data = hxs.select('//tr[@class="oddItemColor baseText"]') 
     tmpNextPage = hxs.select('//div[@class="baseText blue"]/span[@id="pnLink"]/a/@href').extract() 
     for attr in data: 
     #item = RowItem() 
     instrInfo = attr.select('//td[@class="itemResult"]/text()').extract() 
     print "Instrument Info: ", instrInfo 
     yield instrInfo 
+0

parse_item() ожидает, что вы получите элемент или загрузчик, а не строку. – JoeLinux

+0

Спасибо. Я не совсем уверен, что это значит. – page

+0

У вас есть объект RowItem, закомментированный чуть выше вашего экземпляра instrInfo. Вы должны заполнить RowItem и уступить это вместо этого. – JoeLinux

ответ

0

Как сказал JoeLinux, вы возвращаете строку вместо того, чтобы возвращать элемент. Если вы в основном работаете над учебником, у вас, вероятно, есть файл «items.py» где-нибудь (возможно, какое-то другое имя), где вы заданы элемент - кажется, что он называется «RowItem()». Здесь у вас есть несколько полей или, может быть, один.

Что вам нужно сделать, это выяснить, как вы хотите хранить данные в элементе. Итак, сделав валовое предположение, вы, вероятно, хотите, чтобы RowItem() включил поле под названием instrInfo. Так что ваш items.py файл может включать в себя что-то вроде этого:

class RowItem(scrapy.Item): 
    instrInfo = scrapy.Field() 

Тогда ваш паук должен включать в себя что-то вроде:

item = RowItem() 

data = data = hxs.select('//tr[@class="oddItemColor baseText"]') 
for attr in data: 
    instrInfo = attr.select('//td[@class="itemResult"]/text()').extract() 
    item['instrInfo'].append = instrInfo 
return item 

Это пошлет деталь прочь к вашему трубопроводу для обработки.

Как я уже сказал, некоторые грубые предположения о том, что вы пытаетесь сделать, и формат вашей информации, но, надеюсь, это поможет вам начать.

Отдельно функция печати, вероятно, не требуется. Когда элемент возвращается, он отображается в терминале (или журнале) при запуске паука.

Удачи вам!

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