2012-10-03 7 views
5

아래 답변을 찾았습니다. 즉, ItemPipeline의 들여 쓰기가 잘못되어 None을 반환하게되었습니다.Scrapy Spider는 Item 대신 None을 반환합니다.

저는 Scrapy에서 CrawlSpider를 작성하려고 시도 했었습니다. 이전에는 Python을 사용 해본 적이 없었습니다. Spider는 크롤링하고 콜백 함수를 호출하고 데이터를 추출하고 항목을 채 웁니다.하지만 항상 None을 반환합니다. 난 인쇄 기사 호출로 모든 것을 순서대로 테스트 해봤습니다. 나는 yield와 return 모두로 이것을 시도했다. (여전히 차이를 이해할 수는 없지만). 솔직히 말해서 나는 아이디어가 부족합니다. 아래로 아래의 콜백 function.//edit뿐만 아니라

class ZeitSpider(CrawlSpider): 
name= xxxx 
allowed_domains = ['example.com'] 
start_urls = ['http://www.example.com/%d/%d' %(JAHR,39)] 
rules = (Rule(SgmlLinkExtractor(restrict_xpaths=('//ul[@class="teaserlist"]/li[@class="archiveteaser"]/h4[@class="title"]')),callback='parse_url',follow=True),) 

def parse_url(self,response): 

    def parse_url(self,response): 
    hxs = HtmlXPathSelector(response) 

    article = Article() 

    article['url']= response.url.encode('UTF-8',errors='strict') 

    article['author']= hxs.select('//div[@id="informatives"]/ul[@class="tools"]/li[@class="author first"]/text()').extract().pop().encode('UTF-8',errors='strict') 
    article['title']= hxs.select('//div[@class="articleheader"]/h1/span[@class="title"]/text()').extract().pop().encode('UTF-8',errors='strict') 

    article['text']= hxs.select('//div[@id="main"]/p/text()').extract().pop().encode('UTF-8',errors='strict') 

    article['excerpt'] = hxs.select('//p[@class="excerpt"]/text()').extract().pop().encode('UTF-8',errors='strict') 
    yield article 

및 항목 정의를 거미 코드를 추가입니다

class Article(Item): 
    url=Field() 
    author=Field() 
    text=Field() 
    title=Field() 
    excerpt=Field() 

답변

2

좋아, 내가 발견 한 오류 PDB와 프로그램을 통해 스테핑 후 :

여러 개의 거미가있어서 여러 개의 ItemPipeline을 작성하고 싶습니다. 스파이더별로 구분하기 위해

if spider.name=='SpiderName' 
    return item 

들여 쓰기에 유의하십시오. 파이프 라인이 Nothing을 반환 했으므로 출력이 None이되었습니다.

들여 쓰기를 변경 한 후 거미가 완벽하게 작동했습니다. PEBCAC의 또 다른 예입니다.

+0

감사합니다. ''NoneType '객체에는'iterkeys '속성이 없습니다라는 오류 메시지가 있습니다. Google이 여기에서 리디렉션하는 데 도움이 될지도 모릅니다. – KrisWebDev

관련 문제