1. 程式人生 > >Python實現代理池

Python實現代理池

問題起源: 最近在研究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