ProxyHandler处理器(代理设置)

article/2025/10/2 8:13:38

我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么美好,然而一杯茶的功夫可能就会出现错误,比如403 Forbidden,这时候打开网页一看,可能会看到“您的IP访问频率太高”这样的提示。出现这种现象的原因是网站采取了一些反爬虫措施。比如,服务器会检测某个IP在单位时间内的请求次数,如果超过了这个阈值,就会直接拒绝服务,返回一些错误信息,这种情况可以称为封IP。

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

一种有效的方式就是使用代理,后面会详细说明代理的用法。在这之前,需要先了解下代理的基本原理,它是怎样实现IP伪装的呢?

 

基本原理:

代理实际上指的就是代理服务器,英文叫作proxy server,它的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站。在我们正常请求一个网站时,是发送了请求给Web服务器,Web服务器把响应传回给我们。如果设置了代理服务器,实际上就是在本机和服务器之间搭建了一个桥,此时本机不是直接向Web服务器发起请求,而是向代理服务器发出请求,请求会发送给代理服务器,然后由代理服务器再发送给Web服务器,接着由代理服务器再把Web服务器返回的响应转发给本机。这样我们同样可以正常访问网页,但这个过程中Web服务器识别出的真实IP就不再是我们本机的IP了,就成功实现了IP伪装,这就是代理的基本原理

 

代理的作用:

那么,代理有什么作用呢?我们可以简单列举如下。

 

1.突破自身IP访问限制,访问一些平时不能访问的站点。

2.访问一些单位或团体内部资源:比如使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。

3.提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度。

4.隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。对于爬虫来说,我们用代理就是为了隐藏自身IP,防止自身的IP被封锁。

使用代理IP,这是爬虫/反爬虫的第二大招,对于爬虫来说,由于爬虫爬取速度过快,在爬取过程中可能遇到同一个IP访问过于频繁的问题,此时网站就会让我们输入验证码登录或者直接封锁IP,这样会给爬取带来极大的不便。通常这种反爬虫手段也是最好用的。

 

很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个IP的访问。

 

所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。

 

常见的代理分类:

1.根据协议划分:

FTP代理服务器:主要用于访问FTP服务器,一般有上传、下载的功能以及缓存的功能,端口号一般为21,2121等。

HTTP代理服务器:主要用于访问网页,一般有内容过滤和缓存的功能,端口号一般为80、8080、3128等

SSL/TLS代理:主要能用于访问加密的网站,一般有SSL或者TLS加密功能

SOCKS代理:只是单纯的用于传输数据包,不关心具体的协议用法,速度快、有缓存功能,端口号一般为1080

 

2.根据匿名内容划分:

 

高度匿名代理:会将数据包原封不动的转发,在服务器看来就好像真的是一个普通的用户短在访问,而记录的IP就是代理服务器的IP

 

普通匿名代理:会在数据包上做一些改动,服务端上有可能发现这个是代理服务器,也有一定的几率追查到客户端的真实IP,代理服务器通常会加入HTTP头有HTTP_VIA和HTTP_X_FORWARDED_FOR.

 

透明代理:不但改动了数据包,还会告诉服务器客户端的真实IP,这种代理除了用缓存技术提高浏览器速度。能用内容过滤提高安全性之外,并没有其他作用。

 

间谍代理:指的是组织和个人创建的用于记录用户传输的数据,然后进行研究,控制等目的的代理服务器。

 

Urllib (urllib2)中通过ProxyHandler来设置使用代理服务器,下面代码说明如何使用自定义opener来使用代理:

 


Python3  中代码如下:

#-*- coding:utf-8 -*-

import urllib.request

 

# 构建了两个代理Handler,一个有代理IP,一个没有代理IP(这个IP是我从免费IP代理网站获取的,如果你使用的时候不能用了,说明代理已失效,可以重新寻找一个)

httpproxy_handler = urllib.request.ProxyHandler({'http':'60.218.112.112:80'})

nullproxy_handler = urllib.request.ProxyHandler({})

 

#定义一个代理开关(设置为False时使用的是没有代理的效果,可以对比一下)

proxySwitch = True

 

# 通过urllib.request.build_opener()方法使用这些代理Handler对象,

# 创建自定义opener对象

# 根据代理开关是否打开,使用不同的代理模式

if proxySwitch: 

    opener = urllib.request.build_opener(httpproxy_handler)

else:

    opener = urllib.request.build_opener(nullproxy_handler)

 

request = urllib.request.Request('http://www.baidu.com/')

 

# 1. 如果这么写,只有使用opener.open()方法发送请求才使用自定义的代理

#,而urlopen()则不使用自定义代理。

response = opener.open(request)

print(response.getheader('Server'))

 

# 2. 如果这么写,就是将opener应用到全局,之后所有的,

# 不管是opener.open()还是urlopen() 发送请求,都将使用自定义代理。

# 将opener定义为全局的

# urllib.request.install_opener(opener)

# response = urlopen(request)

 

print(response.read())

 

实现代码如下:

 

 


urllib2中通过ProxyHandler来设置使用代理服务器,下面代码说明如何使用自定义opener来使用代理:

 

import urllib2

 

# 构建了两个代理Handler,一个有代理IP,一个没有代理IP

httpproxy_handler = urllib2.ProxyHandler({"http" : "60.218.112.112:80"})

nullproxy_handler = urllib2.ProxyHandler({})

 

proxySwitch = True #定义一个代理开关(设置为False时使用的是没有代理的效果,可以对比一下)

 

# 通过 urllib2.build_opener()方法使用这些代理Handler对象,创建自定义opener对象

# 根据代理开关是否打开,使用不同的代理模式

if proxySwitch:

opener = urllib2.build_opener(httpproxy_handler)

else:

opener = urllib2.build_opener(nullproxy_handler)

 

request = urllib2.Request("http://www.baidu.com/")

 

# 1. 如果这么写,只有使用opener.open()方法发送请求才使用自定义的代理,而urlopen()则不使用自定义代理。

response = opener.open(request)

 

# 2. 如果这么写,就是将opener应用到全局,之后所有的,不管是opener.open()还是urlopen() 发送请求,都将使用自定义代理。

# urllib2.install_opener(opener)

# response = urlopen(request)

 

print response.read()

 


 

那么我们工作中获取代理的途径有哪些呢?

免费的开放代理获取基本没有成本,我们可以在一些代理网站上收集这些免费代理,测试后如果可以用,

就把它收集起来用在爬虫上面。

 

免费短期代理网站举例(

免费的代理IP大多数情况下只有极少部分能够使用

,这些免费开放代理一般会有很多人都在使用,而且代理有寿命短,速度慢,匿名度不高,HTTP/HTTPS支持不稳定等缺点(免费没好货)。

所以,专业爬虫工程师或爬虫公司会使用高品质的私密代理,这些代理通常需要找专门的代理供应商购买,再通过用户名/密码授权使用(舍不得孩子套不到狼)。

):

 

  • 西刺免费代理IP

  • 快代理免费代理

  • Proxy360代理

  • 全网代理IP

 

另外各大代理IP的平台对比网址可做如下参考:

https://cuiqingcai.com/5094.html

 

当然如果爬取数据过程中,我们使用的IP被封掉后,我们就需要更换IP了

如果代理IP足够多,我们就可以创建一个简单的数组,随机选择一个IP代理取访问网站:

#-*- coding:utf-8 -*-

import urllib.request

import random

 

proxy_list = [

    {'http':'111.170.105.230:61234'},

    {'http':'60.218.112.112:80'},

    {'http':'60.177.227.195:18118'},

    {'http':'218.72.109.175:18118'},

    {'http':'49.79.195.51:61234'},

    {'http':'27.209.251.182:61234'},

    {'http':'183.159.88.211:18118'},

]

 

#随机选择一个代理

proxy = random.choice(proxy_list)

#使用选择的代理构建代理处理器对象

httpproxy_handler = urllib.request.ProxyHandler(proxy)

opener = urllib.request.build_operer(httpproxy_handler)

request = urllib.request.Request('http://www.baidu.com/')

response = opener.open(request)

print(response.read())

 

编辑器中代码如下图所示

 


 

Python2下具体代码如下:

import urllib2

import random

 

proxy_list = [

    {'http':'111.170.105.230:61234'},

    {'http':'60.218.112.112:80'},

    {'http':'60.177.227.195:18118'},

    {'http':'218.72.109.175:18118'},

    {'http':'49.79.195.51:61234'},

    {'http':'27.209.251.182:61234'},

    {'http':'183.159.88.211:18118'},

]

# 随机选择一个代理

proxy = random.choice(proxy_list)

# 使用选择的代理构建代理处理器对象

httpproxy_handler = urllib2.ProxyHandler(proxy)

opener = urllib2.build_opener(httpproxy_handler)

request = urllib2.Request("http://www.baidu.com/")

response = opener.open(request) print response.read()


http://chatgpt.dhexx.cn/article/0ityEwKl.shtml

相关文章

代理工具及使用技巧Proxy Hunter

转自:http://bbs.taisha.org/thread-385064-1-1.html 如需转载,请注明出处,谢谢。 由于国外大学图书馆购买的数据库大多数是用IP登陆方式,所以获取这些大学的代理就成为我们利用这些数据库的唯一方式,我介绍的方法是最…

【NEW】抓包工具-ProxyMan

背景 总会有一些移动端需要我们排查问题、调试的场景。之前一直用charles,或者通过在测试环境的debuger的依赖vconsole来看,好久之前下载了一个proxyman抓包工具,今天搞明白这玩意咋用了,真香哈哈哈哈,好用多了。 安…

Xshell 代理链接 ProxyJump

由于vscode 链接服务器插件太多太占资源了,公司不让用vscode,因此智能使用Xshell连服务器。 代理链接,因为有些服务器,只能内网链接,所以需要代理。 先贴一下配置文件 Host 11-xxx-remoteHostName xxxxxxxxxxPort 161…

Chrome配置Proxy代理

Chrome浏览器中配置代理 为什么要配置代理呢?比如你要使用SparkUI 1、将Proxy SwitchyOmega 工具添加到Chrome浏览器的扩展程序中 在chrome浏览器中搜索Proxy SwitchyOmega 选择chrome网上应用店,点进去后 点击后边按钮,将 Proxy Switchy…

ProxyChains

proxychains-ng:https://github.com/rofl0r/proxychains-ng proxychains:https://github.com/haad/proxychains shadowsocks:https://github.com/shadowsocks/shadowsocks 安装了 shadowsocks 之后,只能网页出去逛逛,…

firefox_Proxy Switcher代理插件

配制代理 Linux机器上安装代理squid yum install squid 安装squid service squid start 启动squid chkconfig squid on 开机启动 默认端口为3128

代理猎手(Proxy Hunter)教程(详细图文)

转自:http://blog.sina.com.cn/s/blog_6262609f0100gwk3.html 如需转载,请注明原文出处,谢谢。 下面是代理猎手的界面: 现在我们要来设置代理猎手的参数 (1)【系统】--【参数设置】 在搜索验证设置中的搜索…

zz 教你如何用proxyhunter找大学代理

转自:http://bbs.taisha.org/thread-385064-1-1.html 如需转载,请注明出处,谢谢。 由于国外大学图书馆购买的数据库大多数是用IP登陆方式,所以获取这些大学的代理就成为我们利用这些数据库的唯一方式,我介绍的方法是…

网站改版都包括网站哪些方面的内容呢?

在企业网站建成后,经过长时间运营之后难免会遇到改版的情况发生,由于网站改版是提高网站用户体验的必经之路,因此,企业网站为了保证网站的排名、流量以及权重的方面内容,一定要注意网站改版时需要注意的一些细节内容&a…

网站防篡改解决方案

2005年&#xff0c;境外22万台主机曾对我国网站发起攻击。 2005年&#xff0c;CNCERT/CC收到报告的网络安全事件12万多件&#xff0c;与2004年相比&#xff0c;数量都增长了1倍左右。网页篡改事件占网络安全事件&#xff08;非 <script language"JavaScript1.1"…

网站改版更换服务器seo,网站改版或者更换域名对网站的影响有哪些?

网站更换域名以及网站内容改版到底对网站有多大的影响呢&#xff1f;网站更换域名等于是重头开始做一个网站&#xff0c;之前的收录和排名都是全部为零&#xff0c;风险是非常大的。因此有想过换域名的站长们需要谨慎&#xff0c;那么换域名对网站带来什么影响呢&#xff0c;下…

网站改版需要注意什么?企业网站改版需要注意的五大事项

一、企业网站为什么要改版? 为什么要改版?解答了这个问题&#xff0c;也就解答了是不是要改版。这个问题老渔哥玩网络觉得归总起来可以分三个层面&#xff1a; 1、战略商业层&#xff1a;业务流程的变更&#xff0c;或者说是商业目标的变化、转型;为了延长产品的生命周期; …

网站改版的原因和需要注意的问题

网站改版是每一个做了网站的公司在网站使用一定时间之后都要经历的,那为什么网站要改版呢?主要是因为,网站建设是为公司的营销和发展而服务的,而公司的发展阶段不同,对网站的要求就不同。同时,用户的需求和关注点是不断变化的,我们要跟着用户需求和审美的变化而变化,才…

网页改版过程和步骤

作者&#xff1a;李哲定 时间&#xff1a;2019年4月17日 未改动网站缺陷&#xff1a; 第一点这个网站从整体来看顶部内容太多了看上去密密麻麻的很不舒服&#xff0c;字体颜色不统一大小也不统一&#xff0c;还有这个学校的名称到底是用广东信息科技职业培训学院还是用广信IT学…

网站改版中

网站改版中 2015-06-13 11:58 网页设计 标签&#xff1a;Z-BlogPHP 主题 模板 设计 1498 2 历经多久也忘记了&#xff0c;不过网站的初步框架已经调整到位了&#xff0c;现在就需要做的就是网站的改版。已经完成了网站头部、底部和普通列表页面的制作&#xff0c;因为没…

网站更换域名、改版对网站有哪些影响,如何补救?

域名对站长或者企业来说是非常重要的&#xff0c;因此在网站建设初期&#xff0c;要结合企业产品服务和发展方向慎重考虑&#xff0c;选择匹配的网站域名。一般情况下&#xff0c;我们不建议更改网站域名。如果企业在发展过程中&#xff0c;遇到需要修改域名的情况怎么办&#…

网站改版主要改哪些内容

经过了第一代网站建设以网站美观的主要设计思维和第二代网站建设以用户体验主要设计思维。都已经不能适应新的网站大爆炸的时代&#xff01;怎样在众多网站凸显出来成为了企业打电子战的关键&#xff0c;网站设计从过去的面向用户转化为面向搜索引擎。我门将这种设计思维称为&a…

网站改版方案的一些建议(转)

看了不少的网站改版方案&#xff0c;发现目前大多网站在改版的时候&#xff0c;着重对网站的设计、功能、内容管理系统的投入&#xff0c;而忽略了对已有流量的保持&#xff0c;至于搜索引擎的可见度&#xff0c;几乎没有这个概念。 网站改版&#xff0c;如何改&#xff1f;如果…

sqoop抽取mysql的mediumtext字段类型,被转成ASCII

在使用sqoop抽取mysql中到hive时&#xff0c;其中两个字段数据发生了如下变化: 明显该字段被转成了ascii类型&#xff0c;查看Mysql中数据库表字段是mediumtext类型。 估计是不识别这种类型&#xff0c;找了一下资料&#xff0c;发现可以对字段进行转义&#xff1a; --map-co…

mysql 的text、mediumtext、longtext类型

如果我们的字段保存的是很长一段字符串的话&#xff0c;我们的text类型保存的长度有限&#xff0c;只有65535个字符&#xff0c;超过的话&#xff0c;会被截取&#xff0c;我们保存的内容如果超过了这个长度&#xff0c;我们可以使用mediumtext&#xff0c;或者用longtext&…