Scrapy 框架插件之 IP 免费代理池

RvCRMgjJ1SNU8abzST0Jk6wIVQ7BzArIoNktjzq2TML0jSMUdHxBTiaAjKpPd0glQ3pUXP5GNapjRCeCGhhF3Ww

Photo from Unsplash

?

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

1 特点

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

2 收集的代理网站

目前收集到的代理网站有:

  • 无忧代理(data5u)

  • ip181 代理

  • 快代理

  • 西刺代理

3 项目说明

  • startrun.py

项目的主入口。它负责启动 Scrapy 爬虫和代理池。

  • your_scrapy_project

该目录下主要存放两个文件:config.pysettings.py。config.py 是代理池的项目配置信息。而 settings.py 是你的 Scrapy 爬虫项目的配置参考代码。

  • ProxyPoolWorker.py

ProxyPoolWorker.py 是 IP代理池模块的管理类,负责启动和维护 IP 代理池。

  • proxyDBManager.py

proxyDBManager.py 位于 dbManager 包下。它是数据库操作类。主要工作是创建数据库表、往数据库中插入 IP 代理、查询数据库中剩余的 IP 代理总数、从数据库中随机查询一个 IP 代理、对连接超时或失败的 IP 代理做处理。

  • proxyModel.py

proxyModel.pymodel 包下。它是 IP 代理对象类。

  • requestEnginer.py

requestEnginer.py 位于 requester 目录下。requestEnginer 是整个爬虫代理池的网络引擎。它采用 Session 的形式来发起 HTTP 请求。同时,它还负责验证代理地址有效性,  达到过滤掉无用 IP 代理的目的。

  • scrapy

scrapy 目录是一些 Scrapy 框架的自定义中间件。RandomUserAgentMiddleware.py 是为 HTTP 请求随机设置个 User-agent。middlewares.py 有两个职责。一是为 HTTP 请求随机设置个 IP 代理。二是负责捕获并处理 HTTP 异常请求。

  • spiders

该包主要是爬取各大代理网站的爬虫。

4 使用方法

4.1 安装依赖

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

  • requests

  • apscheduler

  • pymysql

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 上开源了。具体可点击【阅读原文】查看。

END

作者:猴哥

公众号:极客猴

爱好读书,喜欢钻研技术,梦想成为文艺青年的 boy。

?

0

极客猴

分享干货的公众号

0

0

长按指纹 > 识别图中二维码 > 添加关注

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy是一个强大的Python爬虫框架,可以用于抓取和提取网页数据。如果你想在Scrapy中使用代理IP,可以按照以下步骤进行: 1. 首先,你需要准备一个代理IP。这可以是一个存储代理IP的数据库或者一个包含代理IP列表的文件。 2. 在Scrapy的项目中,你可以创建一个中间件来处理代理IP。中间件可以在请求发送之前或之后修改请求。你可以创建一个自定义的中间件类,在其中实现代理IP的设置。 例如,你可以创建一个名为ProxyMiddleware的中间件类,并在其中实现process_request方法,从代理IP中随机选择一个代理IP,并将其设置为请求的代理。 ```python class ProxyMiddleware(object): def process_request(self, request, spider): # 从代理IP中随机选择一个代理IP proxy = get_proxy_ip() request.meta['proxy'] = proxy ``` 3. 将中间件添加到Scrapy的配置中。在项目的settings.py文件中,找到DOWNLOADER_MIDDLEWARES配置项,并将你的中间件类添加到其中。 ```python DOWNLOADER_MIDDLEWARES = { 'your_project_name.middlewares.ProxyMiddleware': 543, # 其他中间件... } ``` 4. 现在,当Scrapy发送请求时,中间件会在请求前设置代理IP。这样,你就可以使用代理IP来爬取网页数据了。 请注意,使用代理IP需要注意合法性和稳定性。你需要确保代理IP有效,并及时更新代理IP,以免影响爬虫的正常运行。另外,使用代理IP时也需要遵守网站的相关规定,避免对目标网站造成不必要的干扰。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值