Python實現代理池
阿新 • • 發佈:2019-02-11
問題起源: 最近在研究Python爬蟲, 爬蟲自然少不了代理, 因此自己動手整理了一個代理池, 用的Free的代理, 因此用了多執行緒加快了爬取速度, 在這裡大體記錄一下.
技術棧: Python、Django、Celery
大體思路: 找到免費的代理網站,然後獲取一些Free的代理地址,然後驗證有效性,儲存到資料庫,暫時還沒有分散式爬蟲的需求,因此對於代理數量需求不大,因此本專案對於大資料支援並不完善(以後有需要在加^0^)。
借鑑了網上大神們寫的程式碼, 使用Django進行網路請求的處理.
主要函式
class FreeProxy(object):
"""
:param proxy
:param [kwargs]
return yield
"""
def __init__(self, proxy, **kwargs):
# Check params is callable.
assert hasattr(proxy, '__call__')
self.proxy = proxy(kwargs) if kwargs else proxy()
from collections import Iterable
# Check params is iterable.
assert isinstance(self.proxy, Iterable)
def get_free_proxy(self):
return self.proxy
# proxy 函式例子
def get_any_proxy():
proxy_list = [] # 自己獲取的代理列表
for proxy in proxy_list:
yield proxy
在這裡不具體寫代理獲取的程式碼了, 只是提供一下樣例, 詳細程式碼可以看我的原始碼(見下文).
然後, 我用Celery做了任務池, 定時自動獲取可用代理地址, 寫入資料庫(sqlite), 定時刪除無效地址.
具體使用方法不在這裡贅述了, 詳見https://github.com/anonymous-qsh/proxy_pool