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

发布了26 篇原创文章 · 获赞 41 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/anonymous_qsh/article/details/79359093
今日推荐