2009-11-28 16 views
10

Por favor, eche un vistazo a this spider example en la documentación de Scrapy. La explicación es:Scrapy SgmlLinkExtractor está ignorando los enlaces permitidos

Esta araña comenzaría a rastrear la página de inicio de example.com, reuniendo enlaces de categoría y enlaces de elementos, analizando este último con el método parse_item. Para cada respuesta al artículo, se extraerán algunos datos del HTML utilizando XPath, y se completará con un artículo.

He copiado exactamente la misma araña y he reemplazado "example.com" con otra url inicial.

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from scrapy.item import Item 
from stb.items import StbItem 

class StbSpider(CrawlSpider): 
    domain_name = "stb" 
    start_urls = ['http://www.stblaw.com/bios/MAlpuche.htm'] 

    rules = (Rule(SgmlLinkExtractor(allow=(r'/bios/.\w+\.htm',)), callback='parse', follow=True),) 

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

     item = StbItem() 
     item['JD'] = hxs.select('//td[@class="bodycopysmall"]').re('\d\d\d\d\sJ.D.') 
     return item 

SPIDER = StbSpider() 

Pero mi araña "STB" no recoge los enlaces de "/ bios /" ya que se supone que debe hacer. Ejecuta la url inicial, raspa el item['JD'] y lo escribe en un archivo y luego se cierra.

¿Por qué se ignora SgmlLinkExtractor? Se lee el Rule porque detecta errores de sintaxis dentro de la línea Rule.

¿Esto es un error? ¿Hay algo mal en mi código? No hay errores, excepto un montón de errores no controlados que veo con cada ejecución.

Sería bueno saber lo que estoy haciendo mal aquí. Gracias por cualquier pista. ¿Estoy malinterpretando lo que se supone que debe hacer SgmlLinkExtractor?

+0

Cuando veo "No hay errores, excepto un montón de errores no controlados que veo en cada ejecución", tengo que rascarme la cabeza. –

+0

Lo siento, veo advertencias de destrucción. Los errores que estaba viendo se debieron a tener telnet y shell abiertos al mismo tiempo, como lo menciona Pablo Hoffman aquí http://stackoverflow.com/questions/1767553/twisted-errors-in-scrapy-spider y cuando cerré el Concha, no los veo más. ¿Alguna pista de por qué los enlaces permitidos no se eliminan? – Zeynel

Respuesta

11

La función parse está realmente implementada y se usa en la clase CrawlSpider, y la está sobrescribiendo involuntariamente. Si cambia el nombre a otra cosa, como parse_item, entonces la Regla debería funcionar.

+0

Gracias. Escribí una araña pitón muy simple y eso funciona para mí. – Zeynel

+0

Curiosamente, tengo el mismo problema. Sin embargo, cuando lo cambio a otra cosa, obtengo un "Error no implementado" para "analizar". – bdd

+0

¿Está usted heredando de CrawlSpider? Si no, entonces necesitas un método llamado "parse". – Jacob

Cuestiones relacionadas