我正在使用scrapy。我已经列出了域名列表。它现在实际上做的是刮掉整个域并搜索pdf链接并将其存储在数据库中。此过程是异步的。 我想从每个域获取10个pdf链接并停止爬虫。
如何做到这一点?
答案 0 :(得分:0)
class MySpider(BaseSpider):
allowed_domains = ['domain1.com', 'domain2.com', ... 'domain10.com']
start_urls = ['http://domain1.com/index.html',
'http://domain2.com/a.html',
...,
'http://domain10.com/b.html']
...
def __init__(self, *a, **kw):
super(MySpider, self).__init__(*a, **kw)
self.domain_counters = collections.defaultdict(set)
def parse(self, response):
....
for link in sel.xpath("//a[contains(@href, '.pdf')"):
# extract domain,
# note that url can be relative and take it from response
domain = urlparse(...)
# keep generating Requests as long as len(self.domain_counters[domain]) < 10
self.domain_counters[domain].add(link)
if len(self.domain_counters[domain]) < 10
yield Request(url=link, callback=self.download_pdf)
请注意,并行拼接几个域可能会减慢每个域的命中节奏,因此更有礼貌