在scrapy中为Linkextractors指定规则
在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)