scrapy的資料收集器可以實時記錄爬蟲狀態資料,預設在爬蟲結束是列印:
c:\anaconda2\lib\site-packages\scrapy\statscollectors.py
class statscollector(object):
def __init__(self, crawler):
self._dump = crawler.settings.getbool('stats_dump')
self._stats = {}
......
def close_spider(self, spider, reason):
if self._dump:
logger.info("dumping scrapy stats:\n" + pprint.pformat(self._stats),
extra=)
self._persist_stats(self._stats, spider)
def _persist_stats(self, stats, spider):
pass
上面是資料收集器的原始碼,可以看到在close_spider中會將self._stats列印出來,預設收集的資訊如下。
結束時:
結束時會有finish_reason,finish_time兩個值,在執行時沒有。
資料收集器允許新增開發者收集自定義資料:
在spider中:
self.crawler.stats.set_value("login_faild", false)
在middleware和pipeline中:
spider.crawler.stats.set_value("login_faild", false)
進入正題如何遠端獲取收集器中的資料
第一種:儲存後獲取,在downloadmiddleware中將狀態資訊寫入redis中,在讀取:
import redis
import time
import requests
class statcollectormiddleware(object):
def __init__(self):
self.r = redis.redis(host='localhost', port=6379, db=0)
self.time = lambda: time.strftime('%y-%m-%d %h:%m:%s')
def process_request(self, request, spider):
stats = spider.crawler.stats.get_stats()
for key, value in stats.items():
value =
self.insert2redis(key, value)
def insert2redis(self, key, value):
self.r.rpush(key, value)
第二種:使用telnet console獲取,首先配置setting,允許外網訪問,記得開啟6023埠,
telnetconsole_host = '0.0.0.0'
telnetconsole_port = [6023, 6073]
預設配置
telnetconsole_host = '127.0.0.1'
telnetconsole_port = [6023, 6073]
然後使用
import telnetlib
tn = telnetlib.telnet('192.168.2.89', port=6023, timeout=10)
tn.write('stats.get_stats()'+'\n')
tn.read_very_eager()
結果:
in [1]: import telnetlib
in [2]: tn = telnetlib.telnet('192.168.2.89', port=6023, timeout=10)
in [3]: tn.write('stats.get_stats()'+'\n')
in [4]: stat = tn.read_very_eager()
in [5]: print stat
>>> stats.get_stats()
>>>
當有多個爬蟲時可以將埠配置在spider中,避免衝突:
custom_settings =
這樣就可以在遠端獲取狀態資訊了,雖然是在區域網測試,但是外網同樣可以。 JVM垃圾收集器之CMS收集器
cms concurrent mark sweep 收集器是一種以獲取最短 停頓時間為目標的收集器。1 cms使用的演算法 cms使用的演算法為 標記 清除 演算法 2 執行過程4步驟 a 初始標記 cms initial mark b 併發標記 cms concurrent mark c 重新標記...
scrapy 資料收集
什麼是資料收集器?資料以key value形式存在,收集一些狀態,簡化資料收集的狀態 計算到底傳送了多少request等等統計資訊 如何對404頁面進行設定?通過response.status等於判斷狀態是否為404,然後把失敗的url新增到初始化的失敗列表中,設定失敗計數收集器 在spider類邏...
並行收集器
預設情況下伺服器上選擇並行收集器。1 並行收集器 這裡也稱為吞吐量收集器 是類似於序列收集器的分代收集器 主要區別在於多個執行緒用於加速垃圾收集。使用命令列選項啟用並行收集器 xx useparallelgc。2 可以使用命令列選項控制垃圾收集器執行緒的數量 xx parallelgcthreads...