使用代理绕过网站的反爬机制

最近在尝试收集一些网络指标的数据, 所以, 我又开始做爬虫了。 :)

我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么的美好,然而一杯茶的功夫可能就会出现错误,比如 403 Forbidden,这时候打开网页一看,可能会看到 “您的 IP 访问频率太高” 这样的提示,或者跳出一个验证码让我们输入,输入之后才可能解封,但是输入之后过一会儿就又这样了。

出现这样的现象的原因是网站采取了一些反爬虫的措施,比如服务器会检测某个 IP 在单位时间内的请求次数,如果超过了这个阈值,那么会直接拒绝服务,返回一些错误信息,这种情况可以称之为封 IP,于是乎就成功把我们的爬虫禁掉了。

既然服务器检测的是某个 IP 单位时间的请求次数,那么我们借助某种方式来伪装我们的 IP,让服务器识别不出是由我们本机发起的请求,不就可以成功防止封 IP 了吗?

所以这时候代理就派上用场了。本章会详细介绍代理的基本知识及各种代理的使用方式,包括代理的设置、代理池的维护、付费代理的使用、ADSL 拨号代理的搭建方法等内容,以帮助爬虫脱离封 IP 的 “苦海”。

获取代理

在做测试之前, 我们需要先获取一个可用代理。搜索引擎搜索 “代理” 关键字,就可以看到许多代理服务网站,网站上会有很多免费代理, 大部分免费的代理都不好用, 我也想过从一些发布免费代理的网页上采集代理的地址, 哎, 就这事, 就花了两天时间, 很多时候, 采集来的代理基本上没法用, 采集了几百个, 最后自检的时候, 就剩下不到20个alive的。

后来找到一个付费的代理, 当然付费代理就好用很多, 常用的付费代理, 我就不一一介绍了, 由于我是采集海外的资源, 所以根据一些论坛的推荐, 找到了 这家, 我也顺便发个aff, 介意勿点。

Socks5.io 海外IP代理

socks5.ioicon-default.png?t=N7T8https://my.socks5.io#FCLRRHBH

为什么推荐这个, 是因为这家让我意外的发现他们家的免费代理也很好用, 不尽快, 还能保证很高的可用性。 来看看这个免费的offer, 0元购

看到没, 说实话, 我现在在做的事情, 包括这篇文章, 就是为了拿到第三个offer。 Anyway, 我们先注册一个账号, 可以先免费使用部分代理, 然后我们使用代理池来确保我们的python 爬虫, 可以批量的添加代理, 或者随机选择代理。

我们先选择免费动态ip代理, 然后可以提取最多100个ip, 剩下就生成API 提取就可以了。 比忘记把你自己的公网地址放到白名单里。 然后生成的url可以直接用浏览器打开, 就可以看到是这样格式的代理地址列表

随便测试一个都可以用。

使用 requests 来随机选择代理访问

对于 requests 来说,代理设置更加简单,我们只需要传入 proxies 参数即可。

还是以上例中的代理为例,我们来看下 requests 的代理的设置:

复制代码

import requestsproxy = '127.0.0.1:9743'
proxies = {'http': 'http://' + proxy,'https': 'https://' + proxy,
}
try:response = requests.get('http://httpbin.org/get', proxies=proxies)print(response.text)
except requests.exceptions.ConnectionError as e:print('Error', e.args)

复制代码

那么结合我们可以每隔一段时间更新一下代理的话, 那么我们可以这样写:

复制代码

proxies = []
current_proxy = 0
token = 'xxxxxx' #生成api里的token字段def get_proxy():global proxiesurl = 'http://api.socks5.io/user_get_ip_list?token={token}&type=dc&qty=100&country=&time=5&format=txt&filter=1'r = requests.get(url)if r.status_code == 200:proxies = r.text.split('\n')else:print('error in get_proxy')

复制代码

# 每次获取一个代理

复制代码

def get_one_proxy():if len(proxies) == 0:get_proxy()global current_proxyp = proxies[current_proxy]if current_proxy == len(proxies) - 1:current_proxy = 0if p is not None and p.strip() != '':current_proxy += 1return pelse:return get_one_proxy()def test_proxy():url = 'https://baidu.com'headers = {'User-Agent': 'customized ua -- 1.0','X-Requested-With': 'XMLHttpRequest',}try:p = get_one_proxy()r = requests.get(url, headers=headers, timeout=5, proxies={'http': f'http://{p}'})if r.status_code == 200:# process html data from r.textwith open(filename, 'w') as f:f.write(r.text)retry = 0return r.textelse:print(f'Error: {r.status_code}')retry = 0return ''

复制代码

 

这样就可以每次更换一个代理的地址来爬网页了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/642112.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序猿成长之路之数据挖掘篇——朴素贝叶斯

朴素贝叶斯是数据挖掘分类的基础,本篇文章将介绍一下朴素贝叶斯算法 情景再现 以挑选西瓜为例,西瓜的色泽、瓜蒂、敲响声音、触感、脐部等特征都会影响到西瓜的好坏。那么我们怎么样可以挑选出一个好的西瓜呢? 分析过程 既然挑选西瓜有多个…

适合金融行业的FTP替代方案是怎么样的?仅需关注三个重点

2018 年以来,受“华为、中兴事件”影响,我国科技尤其是上游核心技术受制于人的现状对我 国经济发展提出了严峻考验。在全球产业从工业经济向数字经济升级的关键时期,中国明确 “数字中国”建设战略, 抢占数字经济产业链制高点。 在…

# 从浅入深 学习 SpringCloud 微服务架构(二)模拟微服务环境(2)通过 RestTemplate 调用远程服务

从浅入深 学习 SpringCloud 微服务架构(二)模拟微服务环境(2)通过 RestTemplate 调用远程服务 段子手168 1、打开 idea 创建父工程 创建 artifactId 名为 spring_cloud_demo 的 maven 工程。 --> idea --> File -->…

MS1000TA超声波测量模拟前端

产品简述 MS1000TA 是一款超声波测量模拟前端芯片,广 泛应用于汽车工业和消费类电子。该芯片具有高度 的灵活性,发射脉冲个数、频率、增益及信号阈值 均可配置。同时,接收通道参数也可以灵活配置, 从而适用于不同尺寸容器、不…

工厂方法模式设计实验

【实验内容】 楚锋软件公司欲开发一个系统运行日志记录器(Logger)。该记录器可以通过多种途径保存系统的运行日志:例如通过文件记录或数据库记录,用户可以通过修改配置文件灵活地更换日志记录方式。在设计各类日志记录器时&#…

入门指南:从零开始学习ReactJS

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

Hadoop大数据处理技术-配置连接篇

​2024/4/17 Hadoop学习前的准备 3)连接虚拟机 上一节配置完成了基础的虚拟机配置及网络配置 下面我们开始建立连接 我们为什么要与虚拟机建立链接呢? 连接虚拟机就好像跟亲友联系一样 总得找个便捷又好用的工具才行 Secure CRT就像是一把能打开通向…

家用充电桩有必要买21KW交流充电桩吗?

随着电动汽车的普及和人们环保出行意识的增强,充电设施的需求日益增长。在选择充电桩时,很多人会考虑到充电速度、功率等因素。而作为交流充电桩中充电效率最高的一种,21KW交流充电桩是否值得购买呢? 从成本角度来看,2…

20240423给飞凌的OK3588-C开发板适配OV13855【绿屏】linux

20240423给飞凌的OK3588-C开发板适配OV13855【绿屏】 2024/4/22 20:29 开发板:飞凌的OK3588-C OS操作系统:linux R4/Buildroot 【OV13855接到CAM1上,如果要接到CAM2上请修改相关的DTS即可】 https://item.taobao.com/item.htm?_unju3ku2f4…

linux信号机制分析

概念 信号递达:实际执行信号的处理动作就是信号递达 信号未决:信号从产生到递达之间的状态就是信号未决(未决就是没有解决) 收到某信号后,把未决信号集中的此信号置为1(1表示未解决的信号)&a…

cesium 指定点旋转rectangle Primitive方式 矩阵篇

cesium中rectangle是水平垂直于正北方向的,rectangle的属性中有rotation,但是rotation是以矩形的中心点进行旋转的,旋转过程中矩形的形状可能会变形,如果需要以矩形的顶点为原点进行旋转,可以采用primitive的方式添加p…

Postman调用OpenAI接口

首先你需要科学上网。。。。。 请求方式:post 请求地址:https://api.openai.com/v1/chat/completions 请求头: Authorization : Bearer key Content-Type : application/json Body : { "messages": [{ "role": &quo…