2014-11-02 74 views
0

有没有一种格式可以指定scrapy中的LinkExtractor中的规则?我已阅读文档,但对我来说不是很清楚。在我的情况下,url链接值在第一页之后不断增加(类似于& pg = 2等等)。例如见下图:在scrapy中的Linkextractor中指定规则

start_urls = ['http://www.examples.com'] 
rules= [Rule (LinkExtractor(allow=['www.examples.com/sports/companies?searchTerm=news+sports&pg=2']), 'parse_torrent')] 

让我知道,如果有指定规则的URL,这样我可以刮掉第1页第2页一个正确的方式......第100页。

回答

0

如果你想从你的起始页面提取链接。 (你的情况是http://www.examples.com

你应该创建一个蜘蛛从CrawlSpider继承,并使用下面的正则表达式。

rules = (
    Rule(LinkExtractor(allow=[r'www.examples.com/sports/companies?searchTerm=news+sports&pg=\d+'], callback='parse_torrent'), 
) 

但似乎你已经知道你的url规则,我建议你自己生成url。

from scrapy.http.request import Request 

def start_requests(self): 
    for i in xrange(1, 100): 
     url = 'www.examples.com/sports/companies?searchTerm=news+sports&pg=' + i 
     yield Request(url=url, callback=parse_torrent) 
+0

您可以使用Linkextractor指定正则表达式吗?看起来sgml已经过时了,我收到了一些错误。 – user3570187 2014-11-04 00:24:24

+0

对不起,我会修改我的代码。实际上,您可以简单地将SgmlLinkExtractor替换为LinkExtractor – kakashi 2014-11-04 03:28:43

0

允许是正则表达式,你只是粘贴一个完整的URL,这是没有意义的。

allow(正则表达式(或列表)) - (绝对)url必须匹配才能提取的单个正则表达式(或正则表达式列表)。如果没有给出(或空),它将匹配所有链接。

Source

它看起来清晰。