使用代理IP,是数据爬取过程中最常用的反爬手段之一。
有经费的,可以订购代理ip提供商的套餐使用,没有的也不担心,许多网站通常都提供了较多的免费代理来吸引客户。我们可以抓取这些免费的代理,来构建自己的代理IP池。
将代理抓取到本地后,因为免费的时效性都较短,所以需要进行二次校验。这一步,你可以定义一个通用的函数,或者,使用更简洁高效的装饰器
校验分两步:

  1. 正则校验代理ip的格式是否正确
  2. requests添加代理请求目标网站,检验代理是否有效

实例如下:

from functools import wraps
import re
import requests
#目标网址
CHECK_URL = 'https://www.baidu.com'
#请求头
HEADERS = {'User-Agent': 'Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11'}
#请求超时设置/秒
TIMEOUT = 5'''ip格式检测装饰器
:param ip:代理ip
:param port:代理端口
'''
def check_proxy_format(func):@wraps(func)def format_wrapper(*args,**kwargs):ip,port = args[:2]if re.match('[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$',ip) and (port>0 and port<65535):return func(*args,**kwargs)print('代理:%s:%d 格式错误'%(ip,port))return format_wrapper'''代理有效性检测装饰器:param ip:代理ip:param port:代理端口:param ptype:协议类型
'''
def check_proxy_valid(func):@wraps(func)def valid_wrapper(*args,**kwargs):ip, port,ptype = argsproxy = {ptype:'{}://{}:{}'.format(ptype,ip,port)}try:requests.packages.urllib3.disable_warnings() #忽略告警resp = requests.get(CHECK_URL,headers=HEADERS,proxies=proxy,verify=False,allow_redirects=False,timeout=TIMEOUT)if resp.status_code==200:print('代理:',ip+':'+str(port),'有效')return func(*args,**kwargs)except Exception as e:print('代理:%s:%d无效'%(ip,port))return valid_wrapper@check_proxy_format
@check_proxy_valid
def test(ip,port,ptype):return Truetest('218.60.8.99',3129,'http') #格式正确测试用例 1
test('118.30.82.54',3629,'http') #格式正确测试用例 2
test('2523.60.8.99',5179,'http')#格式错误测试用例

结果:

代理: 218.60.8.99:3129 有效
代理:118.30.82.54:3629无效
代理:2523.60.8.99:5179 格式错误

使用了多重装饰器进行装饰,不太懂的建议看下博主之前的文章。

博主其他文章推荐:

[1] 【python实用特性】- 迭代、可迭代对象、迭代器

[2] 【python实用特性】- 列表生成式

[3] 【python实用特性】- yield生成器

[4] 【python实用特性】- 装饰器

[5] 【Matplotlib】-自定义坐标轴刻度完成20万+数据的可视化

[6] Python+selenium实现自动爬取实例

[7] python爬取豆瓣Top250-改进版

[8] requests设置请求头、代理

[9] requests使用session保持会话

装饰器应用之校验代理IP相关推荐

  1. 【设计模式】--- 装饰器模式、静态代理模式和动态代理模式

    文章目录 1 引子 2 业务场景介绍 3 静态代理模式 4 装饰器模式 5 动态代理模式 5.1 Proxy --- 具体的代理对象生成组件 5.2 InvocationHandler --- 封装被 ...

  2. Python爬虫热点项目之实现代理IP池(IP proxy pool)

    代理池概述 代理池就是由多个稳定可用代理IP组成的池子.用来应对ip反爬,而网上的免费代理稳定可用的极少,更有甚者连收费的也不都是稳定可用. 开发环境: windous,python3,sublime ...

  3. NodeJs从零构建代理ip池(一)介绍

    <原文地址> 本系列主要讲解如何从零实现一个简单的代理 IP 池,教你从 Node 爬虫入门到融会贯通. 跟着本系列教程,将会学到一个完整 NodeJs 项目的开发到部署的一整套流程. 零 ...

  4. Python3获取代理IP

    操作步骤 分析代理IP网站页面结构. 请求代理IP网站,解析并获取代理IP. 校验代理IP的可用性. 保存可用代理IP到文件中. 页面解析 分析https://www.xicidaili.com/nn ...

  5. Python scrapy设置代理ip

    应用scrapy爬虫的时候,经常遇到ip被封的问题,直接导致无法获取数据,所以要使用代理ip. 在网上有很多大神写的案例,我选择了一个进行使用,不知道是ip的原因还是我写的有问题,还是会报错,但是思路 ...

  6. create-react-app 配置scss,ant-design,装饰器,代理,node支持最新语法,express es6 后端,链接mongodb...

    新建一个项目 npm install -g create-react-app create-react-app my-app cd my-app npm i npm start # 或者,npm 5. ...

  7. 适配器模式、代理模式、装饰器模式使用场景区别

    适配器模式 适配器模式是提供和原先接口不一样的接口,做一个二次转换,原来的接口还是可以继续使用的. 代理模式 原先的接口是不能访问的(无权使用),只能通过代理来去访问原先接口.代理过程中可能会对原有接 ...

  8. 装饰器模式和代理模式的区别

    转载自 装饰器模式和代理模式的区别 学习AOP时,教材上面都说使用的是动态代理,可是在印象中代理模式一直都是控制访问什么的,怎么又动态增加行为了,动态增加行为不是装饰器模式吗?于是找了很多资料,想弄清 ...

  9. FlexyPool如何同时支持连接代理和装饰器

    代理人 FlexyPool监视连接池使用情况,因此需要拦截连接关闭方法调用. 为了简单起见,第一个版本为此目的依赖动态代理: private static class ConnectionInvoca ...

最新文章

  1. python 爬虫系统_实战干货:从零快速搭建自己的爬虫系统
  2. 微信小程序自定义组件,提示组件
  3. Microsoft发布.NET架构指南草案
  4. sudo spctl --master-disable_量大从优批发--阳离子聚丙烯酰胺--用于生活污水、
  5. 《Java8实战》笔记(15):面向对象和函数式编程的混合-Java 8和Scala的比较
  6. oracle迁移父子数据
  7. jvm垃圾回收之类加载机制
  8. 图像处理基本概念、术语
  9. docker版MySQL升级
  10. extjs4.0视频教程
  11. C语言实现去掉字符串中重复的字符
  12. IPV4怎么转换成IPV6?
  13. 监控软件加入智能零售 试着用人脸辨识让消费力提升
  14. 裸眼3d项目,数字平原是这样制作的
  15. 如何使用免费软件实现iPad当Windows电脑副屏的效果
  16. ios直播开发基础,推流协议及流程
  17. VC程序里判断系统是64位还是32位的正确方法
  18. (小米系统系列四)小米/红米手机获取root根目录权限
  19. Interactive natural language question answering over knowledge graphs论文导读
  20. 如何初步部署服务器(运维及服务器部署个人笔记)

热门文章

  1. 解决ubuntu 20.04LTS无法安装deb包的问题“无法安装文件:不支持”成功安装VS Code
  2. uniapp微信小程序分享后,点击进入分享页面无法回到首页
  3. matlab中随机矩阵函数,matlab怎么生成随机矩阵 Matlab如何生成随机矩阵?
  4. “微信故事”盗号?为何谣言总能在微信快速发酵?
  5. H5软键盘弹起收回(IOS与Android)
  6. XS7320 国产高性能IPC
  7. 干货集锦 | Github上的AR、VR开发资源库
  8. 易购网上线 苏宁转身电子商务
  9. 同城聚合平台v59.1.0 本地同城 同城信息 同城商家
  10. jquery案例7——王者显示与隐藏、淡入、淡出、遮罩层、fadeIn、fadeOut