Item Pipeline:
引擎將(Spider返回的)爬取到的Item給Item Pipeline , scrapy-redis 的Item Pipeline將爬取到的Item存入redis的item queue
修改Item Pipeline可以很方便的根據(jù)key從items queue 提取item , 從而實(shí)現(xiàn)items proceses集群
redis 數(shù)據(jù)庫(kù) , 不負(fù)責(zé)爬取 , 只負(fù)責(zé)url指紋判重 , Request的分配 , 以及數(shù)據(jù)的存儲(chǔ)
scrapy-redis 調(diào)度任務(wù)是Request對(duì)象 , 里面信息量比較大(包含url,callbase函數(shù),headers等信息) , 導(dǎo)致結(jié)果降低爬蟲速度 ,占中
大量redis空間 , 想保證效率 , 需要硬件水平
分布式搭建
1.先安裝redis
redis-cli 如果后面有ip地址 , 就是目標(biāo)的數(shù)據(jù)庫(kù) , 沒有ip就是本地的數(shù)據(jù)庫(kù)
keys * #顯示所有的鍵
set 鍵 值 #設(shè)置一個(gè)值
get 鍵 值 #獲取值
直接拿官方給的例子修改
#啟動(dòng)所有slaver端爬蟲的指令 , 下面的格式時(shí)參考格式 , 建議采用這種格式
redis_key = '爬蟲類名(myspider)(最好是,可以隨便寫):start_urls'
#發(fā)送指令
lpush myspider:start_urls 域名(http://xxxxx/)
和allowd_domain = ["dmoz.org"] 等效 , 指定爬取范圍 , 都可以使用
動(dòng)態(tài)獲取爬取范圍
::
def __init__(self,*args,**kwargs):
domain = kwargs.pop('domain',"")
self.allowed_domains = filter(None,domain.split(','))
#修改下面的代碼 , 動(dòng)態(tài)獲取爬取范圍
super(當(dāng)前文件的第一個(gè)類名,self).__init__(*args,**kwargs)
刪除所有redis鍵
//刪除當(dāng)前數(shù)據(jù)庫(kù)中的所有key
flushdb
//刪除所有數(shù)據(jù)庫(kù)中的key
flushall
在服務(wù)器中使用后臺(tái)運(yùn)行 info.log 日志
nohup python3 main.py >info.log &
htop 查看后臺(tái)運(yùn)行進(jìn)程
::
# 將.rst文件生成我的網(wǎng)頁(yè)文檔html
./make.bat html
github 上傳文件命令或者更新文件
git add .
git commit -m .
git push origin_doc master
github克隆命令
git clone https://github.com/tkpy/tk.git
scrapy 參考文件: http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/settings.html
Slphinx 使用手冊(cè): https://zh-sphinx-doc.readthedocs.io/en/latest/contents.html