urllib自定义opener对象设置代理IP

news/2024/11/15 21:37:37/文章来源:https://www.cnblogs.com/qyly/p/18416308

urllib.request.urlopen()源代码——urlopen()在干什么

返回opener.open(url, data, timeout)方法的结果
  _opener = None  # _opener被赋值为None
def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,*, cafile=None, capath=None, cadefault=False, context=None):global _openerif cafile or capath or cadefault:import warningswarnings.warn("cafile, capath and cadefault are deprecated, use a ""custom context instead.", DeprecationWarning, 2)if context is not None:raise ValueError("You can't pass both context and any of cafile, capath, and ""cadefault")if not _have_ssl:raise ValueError('SSL support not available')context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH,cafile=cafile,capath=capath)# send ALPN extension to indicate HTTP/1.1 protocolcontext.set_alpn_protocols(['http/1.1'])https_handler = HTTPSHandler(context=context)opener = build_opener(https_handler)elif context:https_handler = HTTPSHandler(context=context)opener = build_opener(https_handler)elif _opener is None:  # 默认情况下会调用build_opener()_opener = opener = build_opener()else:opener = _openerreturn opener.open(url, data, timeout)

urllib.request.build_opener()

build_opener()函数返回的是OpenerDirector类的实例
 def build_opener(*handlers):opener = OpenerDirector()  # 创建OpenerDirector类的实例openerdefault_classes = [ProxyHandler, UnknownHandler, HTTPHandler,HTTPDefaultErrorHandler, HTTPRedirectHandler,FTPHandler, FileHandler, HTTPErrorProcessor,DataHandler]if hasattr(http.client, "HTTPSConnection"):default_classes.append(HTTPSHandler)skip = set()for klass in default_classes:for check in handlers:if isinstance(check, type):if issubclass(check, klass):skip.add(klass)elif isinstance(check, klass):skip.add(klass)for klass in skip:default_classes.remove(klass)for klass in default_classes:opener.add_handler(klass())for h in handlers:if isinstance(h, type):h = h()opener.add_handler(h)return opener  # 返回实例opener

urllib.request.OpenerDirector().open()

Class OpenerDirectorOpenerDirector为一个类。由上面的代码opener = build_opener()得,opener为OpenerDirector类的一个实例即根据OpenerDirector类创建的对象(build_opener()将创建的实例赋值给opener)。

所以urlopen返回的结果是opener.open()方法的结果——响应(response),而opener.open()是一个更底层的方法,它允许自定义opener对象发送特定的请求,获取响应结果。

自定义opener对象发送请求(添加网络代理Proxy)

在build_opener()函数的参数中添加一个或多个处理程序(handlers)

from urllib.request import Request, ProxyHandler, build_opener
# 设置访问地址
url = 'http://httpbin/get'
# 设置请求对象
req = Request(url)
# 构建可以使用代理的服务器
# ProxyHandler({'type': 'ip: port'})
handler = ProxyHandler()
# 构建一个opener对象
opener = build_opener(handler)
# 发送请求
resp = opener.open(req)
# 打印结果
print(resp.read().decode())

使用OpenerDirector类的add_handler()方法

 

爬虫设置代理就是让别的服务器代替自己的服务器去获取数据。

代理分类

代理网站

小象代理

快代理

云代理

66ip代理

站大爷

开心代理

讯代理

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

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

相关文章

成功塑造孩子的人生,这一步很关键!

塑造孩子行为极为重要 思维决定行为,行为决定习惯,这一理念在家庭教育中尤为重要。明智的家长如同经验丰富的指导者,细心关注并引领孩子塑造正确的行为。他们深知每个孩子都是独一无二的,拥有独特的性格与潜力,不可简单复制或预设。当孩子遭遇困难时,应及时给予支持引导其…

CSP 初赛要点复习

位运算 逻辑与、按位与之类的东西是不同的!“逻辑”的是判断两个数都不为 \(0\),“按位”的是判断两个数的每一个二进制位与的结果,是不同的。其他运算也类似。 运算符优先级如图所示:注意,~ 和 ! 是同级的。 加法位运算表示:a+b=(a^b)+((a&b)<<1)。

7、队列

1、链队#include<stdio.h> #include<malloc.h> #include<assert.h>#define ElemType inttypedef struct QueueNode{ElemType data;struct QueueNode* next; }QueueNode; typedef struct LinkQueue{QueueNode* front;//队头QueueNode* tail;//队尾 }LinkQueu…

内存对齐和缓冲区溢出攻击

.一、问候语 欢迎你来到我的博客! 二、什么是内存对齐计算机中内存空间都是按照字节(byte)进行划分的,所以从理论上讲对于任何类型的变量访问都可以从任意地址开始,但是在实际情况中,在访问特定类型变量的时候经常在特定的内存地址访问,所以这就需要把各种类型数据按照一定…

ARM SMMU原理与IOMMU技术(“VT-d” DMA、I/O虚拟化、内存虚拟化)

名词缩写ASID:Address Space ID 地址空间标识符 CD:Context Descriptor; 上下文描述符; CTP:Context-table pointer 上下文表指针 EPT:Extended Page Table 扩展页表 GPA:Guest Phyical Address 客人的实际地址 GVA:Guest Virtual Address 访客虚拟地址 HPA:Host…

博客园评论区头像换页更新解决方案

使用 MutationObserver 解决了评论区头像换页无法更新的问题。前言 博客园博客正文的评论区的每一条评论其实都是带用户头像链接的,因此有些博客主题利用这个链接,对评论新增了头像显示功能。 但是这部分功能只能在第一次加载页面时有效,一旦出现评论翻页、排序等操作,头像…

数学知识(初赛)

求最大公约数的技巧 利用辗转相除法,gcd(A,B)=gcd(B,A%B),就可以很快速求解。 应用:化简分数,数学题等等。原理:理解为一个长方形,然后要尽量去铺最大正方形,以满足铺满长方形。最后一个铺满长方形的那个正方形肯定是最大公约数。 如下图,这个长方形先铺一个绿色…

高等数学 2.4 隐函数及由参数方程确定的函数的导数

目录一、隐函数求导二、由参数方程所确定的函数的导数三、相关变化率 一、隐函数求导 函数 \(y = f(x)\) 表示两个变量 \(y\) 与 \(x\) 之间的对应关系,这种对应关系可以用各种不同方式表达,例如 \(y = \sin x\) ,\(y = \ln x + \sqrt{1 - x^2}\) 等。这种函数表达方式的特点…

小林coding学习笔记(内存页面置换算法)

缺页中断示意图1 在CPU里执行一条查找某个页面A的指令,首先是虚拟内存,会到虚拟内存和物理内存的映射关系的页表中查询。 2 页表中不存在需要查找的页面A的有效信息。 3 则触发缺页中断信号给操作系统,操作系统收到缺页中断信号后,就会去磁盘里面查找该页面。 4 操作系统在…

Unity中的三种渲染路径

Unity中的渲染路径 Unity的渲染路径 在Unity里,渲染路径(Rendering Path)决定了光照是如何应用到Unity Shader中的。因此,我们只有为Shader正确地选择和设置了需要的渲染路径,该shader的光照计算才可以被正确执行。 unity中的渲染路径:Forward Rendering Path (向前渲染…

白云龙期货投资-第一讲

# 期货散户投资者常见错误 抄底摸顶,进场无依据,无参照物 小赢大亏(小鸟吃食 大象拉屎资金曲线) 用错误的方法分析行情(金死叉) 过分依赖各种交易软件,公式 持亏损的单子隔夜 死扛(进场条件)期货散户投资者常见错误 抄底摸顶,进场无依据,无参照物 小赢大亏(小鸟吃食 大…

408五级流水线强化课笔记

408强化课录播五级流水线相关内容笔记指令流水线基本概念:简单的概念题 指令流水线基本实现:指令按序发射,按序完成 各种冒险:结合MIPS指令序列分析并处理冒险 超标量和动态流水线:简单的概念题五级流水线 五级流水线的设计是为了通过并行提高处理器的吞吐量。图片来自CSA…