2014-11-28 2 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

InstrInfo 인스턴스화 바로 위에 RowItem 객체를 주석 처리했습니다. RowItem을 채우고 그 값을 생성해야합니다. – JoeLinux

답변

0

JoeLinux가 말했듯이 JoeLinux는 아이템을 반환하는 대신 문자열을 사용한다고 말합니다. 이 튜토리얼을 대부분 다루는 경우 항목이 정의되어있는 "items.py"파일을 someplace (다른 이름 일 수도 있습니다)라고하면 "RowItem()"이라고 표시됩니다. 여기 몇 개의 필드가 있거나 아니면 하나만있을 수 있습니다.

당신이해야 할 일은 아이템에 데이터를 저장하는 방법을 파악하는 것입니다. 따라서 총정리 가정하에, RowItem()에 instrInfo라는 필드가 포함되기를 원할 것입니다. 처리 파이프 라인에 떨어져 항목을 보내드립니다

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 

이 :

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

그런 다음 거미 같은 것을 포함해야한다 : 그래서 items.py 파일은 다음과 같은 것을 포함 할 수 있습니다. 내가 말했듯이

은, 당신이해야 할 노력과 정보의 형식, 그러나 희망이 도착하는지에 대한 몇 가지 총 가정 당신은 시작했다.

별도로 인쇄 기능이 필요하지 않습니다. 항목이 반환되면 스파이더가 실행될 때 터미널이나 로그에 표시됩니다.

행운을 빈다.

관련 문제