Python爬虫-代理池-爬取代理入库并测试代理可用性
目的:建立自己的代理池。可以添加新的代理網(wǎng)站爬蟲,可以測(cè)試代理對(duì)某一網(wǎng)址的適用性,可以提供獲取代理的 API。
整個(gè)流程:爬取代理 ----> 將代理存入數(shù)據(jù)庫并設(shè)置分?jǐn)?shù) ----> 從數(shù)據(jù)庫取出代理并檢測(cè) ----> 根據(jù)響應(yīng)結(jié)果對(duì)代理分?jǐn)?shù)進(jìn)行處理 ----> 從 API 取出高分代理 ----> 用高分代理爬取目標(biāo)網(wǎng)站?
分析:
1、爬蟲類的編寫:負(fù)責(zé)抓取代理并返回。
- 因?yàn)椴煌拇砭W(wǎng)站的網(wǎng)頁結(jié)構(gòu)不同,所以需要單獨(dú)為每一個(gè)代理網(wǎng)頁寫爬蟲。
- 調(diào)用每個(gè)爬取方法,依次返回結(jié)果。
2、數(shù)據(jù)庫類的編寫:負(fù)責(zé)代理的存取與代理分?jǐn)?shù)的設(shè)置。
- 判斷待存入代理是否存在,不存在便存入數(shù)據(jù)庫。
- 將代理存入數(shù)據(jù)庫,首次入庫的代理分?jǐn)?shù)設(shè)置為100。
- 代理測(cè)試失敗時(shí),代理分?jǐn)?shù)做相應(yīng)的扣除,分?jǐn)?shù)低于指定值時(shí)從數(shù)據(jù)庫中移除。代理測(cè)試成功時(shí),將代理分?jǐn)?shù)重新設(shè)置為100。
- 需要使用代理時(shí),從數(shù)據(jù)庫中隨機(jī)取出高分代理。
3、保存類的編寫:負(fù)責(zé)執(zhí)行爬取,并將結(jié)果存入數(shù)據(jù)庫。
- 判斷數(shù)據(jù)庫是否已經(jīng)達(dá)到滿足值,根據(jù)返回值決定是否執(zhí)行爬取。
- 將爬取得到的結(jié)果存入數(shù)據(jù)庫
4、測(cè)試代理類的編寫:負(fù)責(zé)測(cè)試代理對(duì)目標(biāo)網(wǎng)站的可用性。
- 用每一個(gè)代理爬取目標(biāo)網(wǎng)站,根據(jù)響應(yīng)狀態(tài)碼對(duì)代理分?jǐn)?shù)進(jìn)行設(shè)置。
5、提取代理 API 的編寫:負(fù)責(zé)提供獲取代理信息的接口。
具體實(shí)現(xiàn):
1、Crawler:
2、RedisClient:
3、Saver:
4、Tester:
5、API:
?
總結(jié):這里我只爬取了兩個(gè)代理網(wǎng)站的代理,西刺和快代理,可以在 Crawler 類中添加名稱以 crwal_ 開始的方法來擴(kuò)充。詳細(xì)代碼我放到 Github上了,https://github.com/ysl125963/proxy-pool
轉(zhuǎn)載于:https://www.cnblogs.com/yangshaolun/p/10932846.html
總結(jié)
以上是生活随笔為你收集整理的Python爬虫-代理池-爬取代理入库并测试代理可用性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Anaconda更新源失败
- 下一篇: Python-类基础