python - follow - Scrapy Spider devuelve None en lugar de Item
scrapy python install (1)
Encontré la respuesta, abajo. En resumen, la sangría incorrecta en el ItemPipeline hizo que devuelva None.
He estado intentando escribir un CrawlSpider en Scrapy, nunca antes había trabajado con python. El Spider rastrea, llama a la función de devolución de llamada, extrae datos y llena el elemento, pero siempre devuelve Ninguno. Lo probé con una llamada a un artículo impreso, todo estaba en orden. He intentado esto con rendimiento y rendimiento (aunque todavía no entiendo la diferencia). Francamente, me he quedado sin ideas. Abajo se encuentra la función de devolución de llamada .//edit también agregó el código araña
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
y la definición del artículo
class Article(Item):
url=Field()
author=Field()
text=Field()
title=Field()
excerpt=Field()
Ok, después de recorrer el programa con pdb encontré el error:
Como tengo varias arañas, quería escribir varias ItemPipelines. Para hacer que se diferencien por Spider, agregué un
if spider.name==''SpiderName''
return item
Observe la sangría. The Pipeline no devolvió nada y, por lo tanto, el resultado pasó a ser None.
Después de cambiar la sangría, la araña funcionó a la perfección. Otro ejemplo de PEBCAC.