前言
隨著大型網站反扒機制的增強,更改IP登陸已經成為一種最高效的方式,為此打造一款超強IP池專案,采用最新最快的Python技術——異步(Async ),撰寫了一個免費的異步爬蟲代理池,以 Python asyncio 為基礎,充分利用 Python 的異步性能,異步處理比同步處理能提升成百上千倍的效率,速度堪比GO語言,
專案介紹
本專案通過爬蟲抓取互聯網上免費代理網站的IP,并且進行異步檢測是否可用,如果可用就放入資料庫,定時對資料庫中的代理進行維護,然后通過web api的形式供外部使用,
專案運行環境
專案使用了 sanic,一個異步網路框架,所以建議運行 Python 環境為 Python3.5+,并且 sanic 不支持 Windows 系統,Windows 用戶可以考慮使用 Ubuntu on Windows,
專案總體架構
專案主要幾大模塊分別是爬取模塊,存盤模塊,校驗模塊,調度模塊,介面模塊,
- 爬取模塊crawler.py
負責爬取代理網站,并將所得到的代理存入到資料庫,每個代理的初始化權值為 INIT_SCORE,
- 存盤模塊database.py
封裝了 Redis 操作的一些介面,提供 Redis 連接池,
- 校驗模塊validator.py
驗證代理 IP 是否可用,如果代理可用則權值 +1,最大值為 MAX_SCORE,不可用則權值 -1,直至權值為 0 時將代理從資料庫中洗掉,
- 調度模塊scheduler.py
負責調度爬取器和校驗器的運行,
- 介面模塊webapi.py
使用 sanic 提供 WEB API (服務器提供介面),
PS:如有需要Python學習資料的小伙伴可以加下方的群去找免費管理員領取
可以免費領取原始碼、專案實戰視頻、PDF檔案等
如何使用
- 安裝 Redis
專案資料庫使用了 Redis,Redis 是一個開源(BSD 許可)的,記憶體中的資料結構存盤系統,它可以用作資料庫、快取和訊息中間件,所以請確保運行環境已經正確安裝了 Redis,安裝方法請參照官網指南,
- 專案原始碼
文末點擊閱讀原文
- 安裝依賴
$ pip install -r requirements.txt
使用API獲取代理
運行代碼后,訪問http://127.0.0.1:5000/進入主頁,如果顯示'Welcome',證明成功啟動,
訪問http://127.0.0.1:5000/get可以獲取一個可用代理,
也可以在程式代碼中用相應的語言獲取,例如:
import requests from bs4 import BeautifulSoup import lxml def get_proxy(): r = requests.get('http://127.0.0.1:5000/get') proxy = BeautifulSoup(r.text, "lxml").get_text() return proxy
Sanic 性能測驗
使用 wrk 進行服務器壓力測驗,基準測驗 30 秒, 使用 12 個執行緒, 并發 400 個 http 連接,測驗 http://127.0.0.1:3289/
$ wrk -t12 -c400 -d30s http://127.0.0.1:3289/ Running 30s test @ http://127.0.0.1:3289/ 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 34.63ms 12.66ms 96.28ms 58.07% Req/Sec 0.96k 137.29 2.21k 73.29% 342764 requests in 30.10s, 49.69MB read Requests/sec: 11387.89 Transfer/sec: 1.65MB
我們看到了什么?平均每秒鐘11387.89個請求,就問你們怕不怕,機器性能更好一下,就是一波DOS攻擊了,
實際代理性能測驗
- 實測效果
https://taobao.com(測驗淘寶)
測驗代理:http://localhost:3289/get/20 測驗網站:https://taobao.com/ 測驗次數: 1000 成功次數: 984 失敗次數: 16 成功率: 0.984
https://baidu.com(測驗百度)
測驗代理:http://localhost:3289/get/20 測驗網站:https://baidu.com 測驗次數: 1000 成功次數: 975 失敗次數: 25 成功率: 0.975
https://zhihu.com(測驗知乎)
測驗代理:http://localhost:3289/get/20 測驗網站:https://zhihu.com 測驗次數: 1000 成功次數: 1000 失敗次數: 0 成功率: 1.0
可以看到其實性能是非常棒的,成功率極高,
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
作者:Python程式員
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/51296.html
標籤:Python
上一篇:anaconda下載包時網路連接錯誤的解決方法(CondaHTTPError:HTTP 000 connection failed for url)
