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