首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何跟踪Scrapy中已抓取的域名数量

问如何跟踪Scrapy中已抓取的域名数量
EN

Stack Overflow用户
提问于 2014-03-05 17:32:52
回答 1查看 249关注 0票数 1

我正在编写Scrapy蜘蛛,这将爬行约1000个域。我在想,如果有任何方法来跟踪域名爬行的数量。因为在一个使用进程中抓取1000个域名需要很长时间。

如果我可以跟踪域名的数量过程,那么我可以触发一些任务,如发送电子邮件后爬行的100个域名的1000。

我试着在网上找,但找不到相关的信息。

如果有人知道什么方法,请告诉我。如果我找不到任何方法,那么我必须跟踪urls爬行的数量。但这将是一件好事,如果域名的数量可以跟踪。

代码语言:javascript
复制
class MySpider(CrawlSpider):
    name = 'alok2'
    # 'list.txt' file have domains which I have to crawl
    allowed_domains = [i.split('\n')[0] for i in open('list.txt','r').readlines()]
    start_urls = ['http://'+i.split('\n')[0] for i in open('list.txt','r').readlines()]
    rules = [Rule(SgmlLinkExtractor(), callback='parse_item',follow=True)]

    def __init__(self,category=None, *args, **kwargs):
        super(MySpider, self).__init__(*args, **kwargs)
        self.count=0 #this is to keep track of domains whose all links have been crawled

    def parse_start_url(self, response):
        self.parse_item(response)

    def parse_item(self, response):
        #lines
        #lines
EN

回答 1

Stack Overflow用户

发布于 2014-03-05 17:54:33

我不确定你所说的“域爬行”是什么意思:是当你处理来自那个域的所有链接时(这可能很长),还是当你遇到一个新的域时。无论如何,我建议你从OffsiteMiddleware中寻找灵感。

打开爬行器时,此中间件将创建一个set()

代码语言:javascript
复制
def spider_opened(self, spider):
    self.domains_seen = set()

对于每个爬行器回调输出,它都会检查该域是否被允许,这取决于爬行器的allowed_domains属性,但在您的例子中,我猜您有一个空的allowed_domains。您可以将其更改为类似以下内容:

代码语言:javascript
复制
def process_spider_output(self, response, result, spider):
    for x in result:
        if isinstance(x, Request):
            domain = urlparse_cached(x).hostname
            if domain and domain not in self.domains_seen:
                self.domains_seen.add(domain)
                if (len(self.domains_seen) % 100) == 0:
                    log.msg("seen %d domains so far" % len(self.domains_seen))
        yield x
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22193685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档