Scrapy SgmlLinkExtractor está ignorando ligações permitidos
-
06-07-2019 - |
Pergunta
Por favor, dê uma olhada este exemplo aranha na documentação Scrapy. A explicação é a seguinte:
Esta aranha iria iniciar o rastreamento de example.com home page, coletando links de categoria e links de itens, analisar o último com o método parse_item. Para cada resposta ao item, alguns dados serão extraídos do HTML utilizando XPath, e um item será preenchido com ele.
Copiei a mesma aranha exatamente, e substituído "example.com" com outro url inicial.
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()
Mas a minha aranha "stb" não se ligações a cobrar de "/ bios /", como é suposto fazer. Corre-se o url inicial, raspa o item['JD']
e grava-lo em um arquivo e, em seguida, sai.
Por que é que SgmlLinkExtractor
é ignorado? O Rule
é lido, porque ele pega erros de sintaxe dentro da linha Rule
.
Este é um bug? há de errado alguma coisa no meu código? Não há erros, exceto um grupo sem tratamento erros que eu vejo com cada corrida.
Seria bom saber o que estou fazendo de errado aqui. Obrigado por todas as pistas. Am I mal entendido que SgmlLinkExtractor
é suposto fazer?
Solução
A função parse
é realmente implementados e utilizados na classe CrawlSpider, e você está substituindo-lo involuntariamente. Se você mudar o nome para algo mais, como parse_item
, a regra deve funcionar.