Pergunta

Eu estou tentando fazer o SgmlLinkExtractor ao trabalho.

Esta é a assinatura:

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

Estou apenas usando allow=()

Assim, entro

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

Assim, a URL inicial é 'http://www.whitecase.com/jacevedo/' e eu estou entrando allow=('/aadler',) e esperar que '/aadler/' vai ser digitalizado também. Mas em vez disso, a aranha varre a url inicial e, em seguida, fecha-se:

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

O que estou fazendo de errado aqui?

Há alguém aqui que usou Scrapy sucesso que pode me ajudar a terminar esta aranha?

Obrigado pela ajuda.

I incluem o código para a aranha abaixo:

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 não vai me deixar postar mais de 1 URL para substituir a URL inicial, se necessário. Desculpe por isso.

Foi útil?

Solução

Você está substituindo o método "de análise" que parece. "Parse", é um método privado em CrawlSpider usado para seguir os links.

Outras dicas

Se você verificar a documentação de um " Aviso " está claramente escrito

"Ao escrever regras de rastreamento de aranha, evite o uso de análise de retorno de chamada, uma vez que o Crawl Aranha usa o próprio método de análise para implementar sua lógica. Então, se você substituir o método de análise, a aranha rastreamento não funcionará mais."

url para verificação

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

Está faltando vírgula após o primeiro elemento para "regras" para ser uma tupla ..

rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+', )), callback='parse', follow=True),)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top