PHA*_*PHA 4 python scrapy scrapy-spider
我使用scrapy爬行1000个网址并将刮下的物品存放在一个mongodb中.我想知道每个网址找到了多少项.从scrapy stats我可以看到'item_scraped_count': 3500
但是,我需要分别为每个start_url计算这个数.还有referer对于我可能会使用手动计算每个网址项目的每个项目领域:
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)
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有来自scrapy的内置支持.
接受挑战!
没有什么scrapy可以直接支持这个,但你可以用你的蜘蛛代码将它与Spider Middleware:
middlewares.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
Run Code Online (Sandbox Code Playgroud)
记得要激活它settings.py:
SPIDER_MIDDLEWARES = {
...
'myproject.middlewares.StartRequestsCountMiddleware': 200,
}
Run Code Online (Sandbox Code Playgroud)
现在你应该能够在蜘蛛统计数据上看到类似的东西:
'start_requests/item_scraped_count/START_URL1': ITEMCOUNT1,
'start_requests/item_scraped_count/START_URL2': ITEMCOUNT2,
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
495 次 |
| 最近记录: |