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

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文件。主要是在你项目中增加以下代码:

5 写在最后

本文来自企鹅号 - 极客猴媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的博客

Centos各种时间[系统时间/硬件时间]

本文来自网络收集,红色的是我自己备注的地方 首先要知道的就是Linux系统中时间的概念: 1)Linux系统中,系统时间和硬件时间是独立的 系统时间是表示系...

41850
来自专栏云加头条

腾讯云存储最佳实践系列二:对象存储中配置自定义域名支持 HTTPS 访问

对象存储中配置自定义域名支持 HTTPS 访问

59800
来自专栏静下来

linux nginx服务器安装verynginx防止CC攻击

image.png 自己国内重要网站都是用的某些商业防护软件,但是最近增加了个国外的vps,就不方便。 当然我看国外某款waf,也挺便宜的,效果不亚于阿里云的...

77860
来自专栏Java技术交流群809340374

分布式锁的3种实现(数据库、缓存、Zookeeper)

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。

16600
来自专栏IT技术精选文摘

从构建分布式秒杀系统聊聊分布式锁

最近懒成一坨屎,学不动系列一波接一波,大多还都是底层原理相关的。上周末抽时间重读了周志明大湿的 JVM 高效并发部分,每读一遍都有不同的感悟。路漫漫,借此,把前...

12230
来自专栏IT笔记

Docker学习之搭建Nginx容器服务

简介 OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方...

37670
来自专栏idba

supervisor 工具介绍

supervisor 是一款基于Python的进程管理工具,可以很方便的管理服务器上部署的应用程序。supervisor的功能如下:

10310
来自专栏杂七杂八

scarpy初识

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。Scrapy的一个最主要...

40190
来自专栏月牙寂

k8s源码分析-----kube-proxy(1)Config

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

33070
来自专栏张戈的专栏

菜鸟教程:Ngnix安装详解

今天,不知道写什么,就找来一篇很详细的 Nginx 安装教程,“滥竽充数”了,另外后面附上马哥关于 nginx 讲解的核心视频教程。 Nginx(发音同 eng...

53740

扫码关注云+社区

领取腾讯云代金券