图片来自 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.py 和 settings.py。config.py 是代理池的项目配置信息。而 settings.py 是你的 Scrapy 爬虫项目的配置参考代码。

ProxyPoolWorker.py

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

proxyDBManager.py

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

proxyModel.py

proxyModel.py 在 model 包下。它是 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 修改配置

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

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

参考 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 上开源了。传送门

pythonscrapy爬虫ip代理池_Scrapy 框架插件之 IP 代理池相关推荐

  1. pythonscrapy爬虫 崔庆才_Scrapy爬虫(一):专题概要

    Scrapy爬虫(一):专题概要 准备工作 在最近做的智能项目中,我们在获取到用户需求的文本后,需要对用户的行为意图进行分析,然后做出响应,比如语义解析.内容推荐.数据整合等.和windows小娜一样 ...

  2. pythonscrapy爬虫ip代理池_在Scrapy中使用IP池或用户代理(python3)

    一.创建Scrapy工程 1 scrapy startproject 工程名 二.进入工程目录,根据爬虫模板生成爬虫文件 1 scrapy genspider -l # 查看可用模板2 scrapy ...

  3. 爬虫增加代理池:使用稳定第三方芝麻代理IP 教程(详细可用)

    先大致说一下,博主在用自己写的脚本为接近100人打卡,结果有一天访问错误,折腾了半天最后只能想到ip被封了,服务器的ip 只能免费更换两次,所以没办法只能另寻他路,不过当时我没弄代理池,我选择了手动打 ...

  4. Python搭建代理IP池(一)- 获取 IP

    使用爬虫时,大部分网站都有一定的反爬措施,有些网站会限制每个 IP 的访问速度或访问次数,超出了它的限制你的 IP 就会被封掉.对于访问速度的处理比较简单,只要间隔一段时间爬取一次就行了,避免频繁访问 ...

  5. Python搭建代理IP池(三)- 检测 IP

    在获取 IP 时,已经成功将各个网站的代理 IP 获取下来了,然后就需要一个检测模块来对所有的代理进行一轮轮的检测,检测可用就设置为满分,不可用分数就减 1,这样就可以实时改变每个代理的可用情况,在获 ...

  6. pythonrequests代理ip_python使用requests模块使用ip代理池

    import json import telnetlib import requests import random # 代理ip列表 proxy_url = "https://raw.gi ...

  7. Python搭建代理IP池(二)- 存储 IP

    上一文写了如何从代理服务网站提取 IP,本文就讲解如何存储 IP,毕竟代理池还是要有一定量的 IP 数量才行.存储的方式有很多,直接一点的可以放在一个文本文件中,但操作起来不太灵活,而我选择的是 My ...

  8. pythonscrapy爬虫_零基础写python爬虫之使用Scrapy框架编写爬虫

    网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间.Scrapy是一个使用Python编写的,轻 ...

  9. dubbo源码深度解析_scrapy框架通用爬虫、深度爬虫、分布式爬虫、分布式深度爬虫,源码解析及应用

    scrapy框架是爬虫界最为强大的框架,没有之一,它的强大在于它的高可扩展性和低耦合,使使用者能够轻松的实现更改和补充. 其中内置三种爬虫主程序模板,scrapy.Spider.RedisSpider ...

  10. 从0到1爬虫学习笔记:04Scrapy框架

    文章目录 1 Scrapy概述 1.1 Scrapy架构图 1.2 Scrapy开发步骤 2 入门案例 2.1 学习目标 2.2 新建项目(scrapy startproject) 2.3 明确目标( ...

最新文章

  1. linux sftp权限设置,Linux设置SFTP服务用户目录权限
  2. ssm启动报错cannot find class_SSM整合补充 RBAC(权限控制)过滤器
  3. 微信小程序实时获取用户经纬度
  4. python和R对dataframe的单列数据进行统计:value_counts、table、unique、nunique、min、max、mean、sort、length、var、quantile、
  5. CION AP192主控量产低格工具v3.35
  6. SAP Spartacus category navigation按钮之间的间隔问题
  7. oracle 10g 关库,Oracle Db10g 启动和关闭数据库
  8. 女生适合学ux吗_UX设计色彩心理学,理论与可访问性
  9. 实体零售全渠道及数字化发展报告(2020)
  10. dsp 有fft程序吗_Python 中 FFT 快速傅里叶分析
  11. java里面的内存机制_Stack vs. Heap:了解 Java 的内存分配机制
  12. csdn中下载资源入口查找
  13. matlab gui中断程序,MATLAB GUI的中斷程序
  14. 瀑布流插件masonry
  15. app对于接口返回数据的容错测试(健壮性测试)
  16. autojs左右滑动脚本代码_Swiper.js实现移动端元素左右滑动
  17. mtk android 多媒体架构,MTK6739核心板
  18. ticker定时器用法
  19. 微信公众号页面中监听手机“返回”,并回到公众号里
  20. 使用echarts将Excel的数据可视化

热门文章

  1. 【Hexo搭建个人博客】:yilia主题配置(二) - 背景图片
  2. 北京邮电大学计算机学院考研调剂,2020考研调剂信息:北京邮电大学计算机学院招生信息...
  3. Android 汉字转拼音工具类
  4. 导出Excel支持锁定表头
  5. android 投屏代码,android投屏技术:控制设备源码分析
  6. 手机的尺寸、分辨率、像素密度的关系
  7. AI换脸,流行一阵儿了;其中原理你一定也明白!
  8. word“您的组织策略阻止我们为您完成此操作”解决记录
  9. python模拟ios点击_使用Xcode + Python进行IOS运动轨迹模拟
  10. Hearbeat + Nginx 安装配置