每个 start_url 已抓取多少个项目

2024-05-01

我使用 scrapy 抓取 1000 个 url 并将抓取的项目存储在 mongodb 中。我想知道每个网址找到了多少个项目。从 scrapy 统计数据我可以看到'item_scraped_count': 3500但是,我需要分别对每个 start_url 进行计数。还有referer我可以用来手动计算每个 url 项目的每个项目的字段:

2016-05-24 15:15:10 [scrapy] DEBUG: Crawled (200) <GET https://www.youtube.com/watch?v=6w-_ucPV674> (referer: https://www.youtube.com/results?q=billys&sp=EgQIAhAB)

但我想知道scrapy是否有内置支持。


已接受的挑战!

上面没有东西scrapy直接支持这一点,但是您可以使用以下命令将其与蜘蛛代码分开Spider Middleware http://doc.scrapy.org/en/latest/topics/spider-middleware.html:

中间件.py

from scrapy.http.request import Request

class StartRequestsCountMiddleware(object):

    start_urls = {}

    def process_start_requests(self, start_requests, spider):
        for i, request in enumerate(start_requests):
            self.start_urls[i] = request.url
            request.meta.update(start_request_index=i)
            yield request

    def process_spider_output(self, response, result, spider):
        for output in result:
            if isinstance(output, Request):
                output.meta.update(
                    start_request_index=response.meta['start_request_index'],
                )
            else:
                spider.crawler.stats.inc_value(
                    'start_requests/item_scraped_count/{}'.format(
                        self.start_urls[response.meta['start_request_index']],
                    ),
                )
            yield output

记得激活它settings.py:

SPIDER_MIDDLEWARES = {
    ...
    'myproject.middlewares.StartRequestsCountMiddleware': 200,
}

现在您应该能够在蜘蛛统计信息中看到类似的内容:

'start_requests/item_scraped_count/START_URL1': ITEMCOUNT1,
'start_requests/item_scraped_count/START_URL2': ITEMCOUNT2,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每个 start_url 已抓取多少个项目 的相关文章

随机推荐