在scrapy中为Linkextractors指定规则

0 投票
2 回答
1443 浏览
提问于 2025-05-01 05:09

在scrapy中,有没有一种格式可以用来指定LinkExtractor的规则?我看过文档,但对我来说不是很清楚。在我的情况下,网址链接的值在第一页之后会不断增加(类似于&pg=2等等)。例如,下面的内容:

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

请告诉我有没有正确的方法来指定规则中的网址,这样我就可以抓取第1页、第2页……一直到第100页。

暂无标签

2 个回答

0

“allow”是一个正则表达式,你现在只是粘贴了一个完整的URL,这样做没有意义。

“allow”可以是一个正则表达式(或者是一个正则表达式的列表)——这是一个单独的正则表达式(或者是多个正则表达式的列表),只有那些(绝对)URL符合这个表达式,才能被提取出来。如果没有提供(或者是空的),那么它会匹配所有的链接。

来源

我觉得这很清楚。

0

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

你应该创建一个爬虫,继承自 CrawlSpider,并使用下面的正则表达式。

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

不过看起来你已经知道你的网址规则了,我建议你自己生成网址。

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)

撰写回答