Domanda

Sto cercando di far funzionare SgmlLinkExtractor.

Questa è la firma:

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

Sto solo usando allow=()

Quindi, inserisco

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

Quindi, l'URL iniziale è 'http://www.whitecase.com/jacevedo/' e sto inserendo allow = ('/ aadler',) e aspettiamo quello Anche '/ aadler /' verrà scansionato. Ma invece, il ragno analizza l'URL iniziale e quindi chiude:

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

Cosa sto facendo di sbagliato qui?

C'è qualcuno qui che ha usato con successo Scrapy che può aiutarmi a finire questo ragno?

Grazie per l'aiuto.

Includo il codice per il ragno di seguito:

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

Nota: SO non mi consente di pubblicare più di 1 URL, quindi sostituire l'URL iniziale, se necessario. Mi dispiace per quello.

È stato utile?

Soluzione

Stai eseguendo l'override di " parse " metodo sembra. " parse " ;, è un metodo privato in CrawlSpider usato per seguire i collegamenti.

Altri suggerimenti

se controlli la documentazione a " Avviso " è chiaramente scritto

" Quando si scrivono le regole del ragno di ricerca per indicizzazione, evitare di utilizzare l'analisi come callback, poiché il Ragno per indicizzazione utilizza il metodo di analisi stesso per implementare la sua logica. Pertanto, se si ignora il metodo di analisi, il ragno di scansione non funzionerà più. & Quot;

url per verifica

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

Manca la virgola dopo il primo elemento per " regole " essere una tupla ..

rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+', )), callback='parse', follow=True),)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top