Pregunta

Eche un vistazo a este ejemplo de araña en la documentación de Scrapy. La explicación es:

  

Esta araña comenzaría a rastrear la página de inicio de example.com, recopilando enlaces de categorías y enlaces de elementos, analizando estos últimos con el método parse_item. Para cada respuesta de elemento, se extraerán algunos datos del HTML usando XPath, y se completará un elemento con él.

Copié exactamente la misma araña, y reemplacé " 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 recopila enlaces de " / bios / " como se supone que debe hacer. Ejecuta la url inicial, raspa el elemento ['JD'] y lo escribe en un archivo y luego se cierra.

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

¿Es esto 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 qué estoy haciendo mal aquí. Gracias por cualquier pista. ¿Estoy malinterpretando lo que se supone que debe hacer SgmlLinkExtractor ?

¿Fue útil?

Solución

La función parse en realidad se implementa y se usa en la clase CrawlSpider, y la anula involuntariamente. Si cambia el nombre a otra cosa, como parse_item , entonces la Regla debería funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top