python3-python使用代理进行数据的请求,代理服务器。 女爷i 2023-09-27 12:14 77阅读 0赞 ### 一、代理的基本知识 ### #### 1 为什么要使用代理 #### * 让服务器以为不是同一个客户端在请求 * 防止我们的真实地址被泄露,防止被追究 #### 2 使用代理的过程 #### 代理的使用过程,如下图: ![在这里插入图片描述][2ab4be65a7b547358172ba4f3e810739.png] 数据的请求(request):浏览器先向代理服务器请求,再由代理服务器向真正的服务器请求。 数据的响应(response):则沿着相反的方向进行。 #### 3 理解正向代理和反向代理的区别 #### * 正向代理:对于浏览器知道服务器的真实地址,例如VPN * 反向代理:浏览器不知道服务器的真实地址,例如nginx **详细讲解:** 正向代理是客户端与正向代理客户端在同一局域网,客户端发出请求,正向代理 替代客户端向服务器发出请求。服务器不知道谁是真正的客户端,正向代理隐藏了真实的请求客户端。 反向代理:服务器与反向代理在同一个局域网,客服端发出请求,反向代理接收请求 ,反向代理服务器会把我们的请求分转发到真实提供服务的各台服务器Nginx就是性能非常好的反向代理服务器,用来做负载均衡。 ### 二、代理的使用 ### #### 1 用法: #### * 用法: requests.get("http://www.baidu.com", proxies = proxies) * proxies的形式:字典 * 例如: proxies = { "http": "http://12.34.56.79:9527", "https": "https://12.34.56.79:9527", } #### 2 代理IP的分类 #### ##### 根据代理ip的匿名程度,代理IP可以分为下面三类: ##### * 透明代理(Transparent Proxy):透明代理的意思是客户端根本不需要知道有代理服务器的存在,但是它传送的仍然是真实的IP。使用透明代理时,对方服务器是可以知道你使用了代理的,并且他们也知道你的真实IP。你要想隐藏的话,不要用这个。透明代理为什么无法隐藏身份呢?因为他们将你的真实IP发送给了对方服务器,所以无法达到保护真实信息。 * 匿名代理(Anonymous Proxy):匿名代理隐藏了您的真实IP,但是向访问对象可以检测是使用代理服务器访问他们的。会改变我们的请求信息,服务器端有可能会认为我们使用了代理。不过使用此种代理时,虽然被访问的网站不能知道你的ip地址,但仍然可以知道你在使用代理,当然某些能够侦测ip的网页也是可以查到你的ip。(https://wenku.baidu.com/view/9bf7b5bd3a3567ec102de2bd960590c69fc3d8cf.html) * 高匿代理(Elite proxy或High Anonymity Proxy):高匿名代理不改变客户机的请求,这样在服务器看来就像有个真正的客户浏览器在访问它,这时客户的真实IP是隐藏的,完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象,同时服务器端不会认为我们使用了代理。IPDIEA覆盖全球240+国家地区ip高匿名代理不必担心被追踪。 在使用的使用,毫无疑问使用高匿代理效果最好。 ##### 从请求使用的协议可以分为: ##### * http代理 * https代理 * socket代理等 不同分类的代理,在使用的时候需要根据抓取网站的协议来选择 #### 3 代理IP使用的注意事项 #### * 反反爬 使用代理ip是非常必要的一种`反反爬`的方式 但是即使使用了代理ip,对方服务器任然会有很多的方式来检测我们是否是一个爬虫,比如: * 一段时间内,检测IP访问的频率,访问太多频繁会屏蔽 * 检查Cookie,User-Agent,Referer等header参数,若没有则屏蔽 * 服务方购买所有代理提供商,加入到反爬虫数据库里,若检测是代理则屏蔽 所以更好的方式在使用代理ip的时候使用随机的方式进行选择使用,不要每次都用一个代理ip * 代理ip池的更新 购买的代理ip很多时候大部分(超过60%)可能都没办法使用,这个时候就需要通过程序去检测哪些可用,把不能用的删除掉。 * 代理服务器平台的使用: 当然还有很多免费的,但是大多都不可用需要自己尝试 * http://www.66ip.cn * https://ip.jiangxianli.com/?page=1 * https://www.zdaye.com * https://www.kuaidaili.com/free ### 三、代理的配置 ### * 浏览器配置代理 右边三点==> 设置==> 高级==> 代理==> 局域网设置==> 为LAN使用代理==> 输入ip和端口号即可 参考网址:https://jingyan.baidu.com/article/a681b0dece76407a1843468d.html * 代码配置 urllib handler = urllib.request.ProxyHandler({ 'http': '114.215.95.188:3128'}) opener = urllib.request.build_opener(handler) # 后续都使用opener.open方法去发送请求即可 requests # 用到的库 import requests # 写入获取到的ip地址到proxy # 一个ip地址 proxy = { 'http':'http://221.178.232.130:8080' } """ # 多个ip地址 proxy = [ {'http':'http://221.178.232.130:8080'}, {'http':'http://221.178.232.130:8080'} ] import random proxy = random.choice(proxy) """ # 使用代理 proxy = { 'http': 'http://58.20.184.187:9091' } result = requests.get("http://httpbin.org/ip", proxies=proxy) print(result.text) ### 四、总结 ### * requests发送post请求使用requests.post方法,带上请求体,其中请求体需要时字典的形式,传递给data参数接收; * 在requests中使用代理,需要准备字典形式的代理,传递给proxies参数接收; * 不同协议的url地址,需要使用不同的代理去请求。 [2ab4be65a7b547358172ba4f3e810739.png]: https://img-blog.csdnimg.cn/2ab4be65a7b547358172ba4f3e810739.png
还没有评论,来说两句吧...