1. 爬取思路
1.1 三種策略
[基于scrapy-redis的三種爬蟲策略]https://www.cnblogs.com/qq1141/p/7057819.html
? 三種策略:
- slaver從master領(lǐng)取任務(wù)铃绒,并且把新發(fā)現(xiàn)的任務(wù)提交給master
- 由master負責(zé)發(fā)現(xiàn)新任務(wù)阿趁,slaver只負責(zé)領(lǐng)任務(wù)干活
- slaver領(lǐng)取新任務(wù)時詢問master是否新任務(wù)秩贰,master只做指示
1.2 系統(tǒng)架構(gòu)
scrapy+redis+mongoDb(存儲)+django web+semantic ui (展示)
騷操作:1. 增量爬取和去重 2. 動態(tài)ua,動態(tài)代理 3. 非200請求狀態(tài)處理 4. 人工打碼等
20170529201944719.png
20170529203108386.png
1.3 爬蟲運行流程
? redis會存在兩個由sorted set實現(xiàn)的 LIFO 隊列: next_link 、detail_request谐宙。master先推請求鏈接到redis,爬蟲獲取初始鏈接開始爬取血崭,返回結(jié)果包括下一頁鏈接和內(nèi)容詳情頁卧惜,分別放到不同隊列里厘灼。slave端從detail_request拉取內(nèi)容詳情頁開始解析并且保存到mongodb。
1.4 QA
1.4.1 為何要去重與增量爬妊蚀伞设凹?
去重與增量爬取,對于服務(wù)器有很重大的意義茅姜,能夠減少服務(wù)器的壓力以及保證數(shù)據(jù)的準確性闪朱。如果不采取去重處理,那么抓取的內(nèi)容會抓取大量重復(fù)內(nèi)容钻洒,讓爬蟲效率極大的下降奋姿。
1.4.2 反爬蟲常見措施?
- 頻繁訪問輸入驗證碼或者重新登錄
- 封禁IP
1.4.3 如何反反爬蟲素标?
- 模擬不同瀏覽器行為(定義ua列表)
- 以一定頻率更換代理服務(wù)器和網(wǎng)關(guān)(爬取足量免費ip代理称诗,設(shè)置代理請求)
- 減少并發(fā)爬取的進程,限制每個ip并發(fā)爬取的次數(shù)
- 禁用cookie头遭,網(wǎng)站會在用戶訪問時在cookie中插入一些信息來判斷是否是機器人寓免,我們屏蔽調(diào)cookie(有點蒙蔽)
- 人工打碼,這應(yīng)該是無懈可擊的防被禁措施计维,所有系統(tǒng)也比不過人工的操作袜香,但是減少了自動化,效率也不高鲫惶,但確實最有效的措施蜈首。爬蟲被禁的時候,會重定向到一個驗證碼頁面去欠母,輸入驗證碼即可重新有權(quán)限訪問頁面欢策,為此,我加了郵件提醒模塊艺蝴,當爬蟲被禁猬腰,發(fā)郵件提醒管理員解封,同時將重定向的請求重新加入到待爬取的下載隊列當中猜敢,保證數(shù)據(jù)的完整度姑荷。
1.5 爬蟲異常狀態(tài)組件的處理
20170529221005515.png
2.環(huán)境、工具安裝
未完待續(xù)缩擂,參考https://github.com/shisiying/tc_zufang githuber的代碼鼠冕,本地執(zhí)行