在scrapy中刮掉10个链接,然后停止抓取域并从另一个开始

时间:2014-01-14 09:05:16

标签: python scrapy

我正在使用scrapy。我已经列出了域名列表。它现在实际上做的是刮掉整个域并搜索pdf链接并将其存储在数据库中。此过程是异步的。 我想从每个域获取10个pdf链接并停止爬虫。

如何做到这一点?

1 个答案:

答案 0 :(得分:0)

scrapy是关于并行性的,可能会做类似的事情:

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)

请注意,并行拼接几个域可能会减慢每个域的命中节奏,因此更有礼貌