Question

Veuillez consulter cet exemple d'araignée dans la documentation Scrapy. L'explication est la suivante:

  

Cette araignée commencerait à explorer la page d’accueil d’exemple.com, en collectant des liens de catégorie et des liens d’article, en analysant cette dernière avec la méthode parse_item. Pour chaque réponse d'élément, certaines données seront extraites du code HTML à l'aide de XPath et un élément en sera rempli.

J'ai copié exactement la même araignée et remplacé "& example; exemple.com". avec une autre URL initiale.

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

Mais mon araignée " stb " ne collecte pas les liens de " / bios / " comme il est supposé faire. Il exécute l'URL initiale, extrait l'élément ['JD'] , l'écrit dans un fichier, puis se ferme.

Pourquoi SgmlLinkExtractor est-il ignoré? La Rule est lue car elle intercepte les erreurs de syntaxe à l'intérieur de la ligne Rule .

Est-ce un bug? y a-t-il quelque chose qui cloche dans mon code? Il n'y a pas d'erreur sauf une série d'erreurs non gérées que je vois à chaque exécution.

Ce serait bien de savoir ce que je fais mal ici. Merci pour tous les indices. Est-ce que je comprends mal ce que SgmlLinkExtractor est censé faire?

Était-ce utile?

La solution

La fonction parse est en réalité implémentée et utilisée dans la classe CrawlSpider et vous la redéfinissez involontairement. Si vous changez le nom, par exemple, parse_item , la règle devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top