Question

J'essaie de faire fonctionner le SgmlLinkExtractor.

Ceci est la signature:

SgmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), restrict_xpaths(), tags=('a', 'area'), attrs=('href'), canonicalize=True, unique=True, process_value=None)

J'utilise simplement allow = ()

Alors, j'entre

rules = (Rule(SgmlLinkExtractor(allow=("/aadler/", )), callback='parse'),)

Donc, l'URL initiale est 'http://www.whitecase.com/jacevedo/' et j'entre allow = ('/ aadler',) et attendre que '/ aadler /' sera également analysé. Mais au lieu de cela, l'araignée scanne l'URL initiale et ferme ensuite:

[wcase] INFO: Domain opened
[wcase] DEBUG: Crawled </jacevedo/> (referer: <None>)
[wcase] INFO: Passed NuItem(school=[u'JD, ', u'Columbia Law School, Harlan Fiske Stone Scholar, Parker School Recognition of Achievement in International and Foreign Law, ', u'2005'])
[wcase] INFO: Closing domain (finished)

Qu'est-ce que je fais mal ici?

Y at-il quelqu'un ici qui a utilisé Scrapy avec succès et qui peut m'aider à finir cette araignée?

Merci pour votre aide.

J'inclus le code de l'araignée ci-dessous:

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 Nu.items import NuItem
from urls import u

class NuSpider(CrawlSpider):
    domain_name = "wcase"
    start_urls = ['xxxxxx/jacevedo/']

    rules = (Rule(SgmlLinkExtractor(allow=("/aadler/", )), callback='parse'),)

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

        item = NuItem()
        item['school'] = hxs.select('//td[@class="mainColumnTDa"]').re('(?<=(JD,\s))(.*?)(\d+)')
        return item

SPIDER = NuSpider()

Remarque: SO ne me laissera pas poster plus de 1 url, remplacez donc l’URL initiale si nécessaire. Désolé pour ça.

Était-ce utile?

La solution

Vous écrasez la " analyse " méthode il apparaît. "Parse" est une méthode privée dans CrawlSpider utilisée pour suivre les liens.

Autres conseils

si vous vérifiez la documentation, " Avertissement " est clairement écrit

"Lors de l'écriture de règles d'analyse d'araignées, évitez d'utiliser l'analyse comme rappel, car Crawl Spider utilise la méthode d'analyse elle-même pour implémenter sa logique. Donc, si vous substituez la méthode d'analyse, l'araignée d'analyse ne fonctionnera plus. "

url de vérification

allow = (r '/ aadler /', ...

Il vous manque une virgule après le premier élément de " règles " être un tuple ..

rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+', )), callback='parse', follow=True),)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top