Python爬虫码农的世界程序员

Scrapy 框架插件之 IP 代理池

2017-12-27  本文已影响468人  猴哥爱读书
图片来自 unsplash

现在很多网站都是对单个 IP 地址有访问次数限制,如果你在短时间内访问过于频繁。该网站会封掉你 IP,让你在一段时间内无法正常该网站。突破反爬虫机制的一个重要举措就是代理 IP。拥有庞大稳定的 IP 代理,在爬虫工作中将起到重要的作用,但是从成本的角度来说,一般稳定的 IP 池都很贵。因此,我为 Scrapy 爬虫编写个免费 IP 代理池插件。

1 特点

该插件适用的程序是基于 Scrapy 框架编写的爬虫程序。插件通过爬取免费代理地址,然后过滤掉无效 IP 代理后存放到 Mysql 数据库。另外,它会每 10 分钟轮询数据库中的 IP 代理数量。如果代理地址因为连接失败次数超过 3 次被删除,从而导致代理不够,它会后台重新爬取新的 IP 代理。

2 收集的代理网站

3 项目说明

4 使用方法

4.1 安装依赖

使用本插件,你需要通过 pip 安装以下依赖:

4.2 修改配置

  1. startrun.py 放到你的 Scrapy 项目的主目录下。例如你项目名为 demo,那么你需要放到 demo 的目录下。

  2. 修改 config.py 里面的 Mysql 相关配置信息。然后将其放到你的 Scrapy 项目的二级目录下。假如你项目名为 demo,那么你需要放到 demo /demo 的目录下。

  3. 参考 setting.py,修改你的 Scrapy 项目中的 setting.py 文件。主要是在你项目中增加以下代码:

# 默认使用 IP 代理池
if IF_USE_PROXY:
    DOWNLOADER_MIDDLEWARES = {
        # 第二行的填写规则
        #  yourproject.myMiddlewares(文件名).middleware类

        # 设置 User-Agent
        'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None,
        'proxyPool.scrapy.RandomUserAgentMiddleware.RandomUserAgentMiddleware': 400,

        # 设置代理
        'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': None,
        'proxyPool.scrapy.middlewares.ProxyMiddleware': 100,

        # 设置自定义捕获异常中间层
        'proxyPool.scrapy.middlewares.CatchExceptionMiddleware': 105,
    }

5 写在最后

本项目目前是第一版,可能有些不完善的地方。如果你有宝贵的完善建议或者有更多的代理网站,可以反馈给我。我会持续完善本项目。最后,本项目也在 github 上开源了。传送门


上篇阅读:Python 实现识别弱图片验证码
推荐阅读:Python定时任务(下)


上一篇下一篇

猜你喜欢

热点阅读