Domanda

Dai un'occhiata a questo esempio di ragno nella documentazione di Scrapy. La spiegazione è:

  

Questo ragno inizierà a eseguire la scansione della home page di example.com, raccogliendo collegamenti di categorie e collegamenti di elementi, analizzando quest'ultimo con il metodo parse_item. Per ogni risposta dell'articolo, alcuni dati verranno estratti dall'HTML usando XPath e un oggetto verrà riempito con esso.

Ho copiato esattamente lo stesso ragno e ho sostituito " example.com " con un altro URL iniziale.

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()

Ma il mio ragno " stb " non raccoglie collegamenti da " / bios / " come dovrebbe fare. Esegue l'URL iniziale, utilizza l'elemento ['JD'] , lo scrive su un file e poi si chiude.

Perché SgmlLinkExtractor viene ignorato? Il Rule viene letto perché rileva errori di sintassi all'interno della riga Rule .

È un bug? c'è qualcosa che non va nel mio codice? Non ci sono errori tranne un mucchio di errori non gestiti che vedo ad ogni esecuzione.

Sarebbe bello sapere cosa sto facendo di sbagliato qui. Grazie per qualsiasi indizio. Sto fraintendendo cosa dovrebbe fare SgmlLinkExtractor ?

È stato utile?

Soluzione

La funzione parse è effettivamente implementata e utilizzata nella classe CrawlSpider e la stai sovrascrivendo involontariamente. Se cambi il nome in qualcos'altro, come parse_item , allora la Regola dovrebbe funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top