python3 request.urlretrieve 添加请求头下载图片

import urllib.request

opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve("type URL here", "path/file_name")

在urllib.request.urlretrieve()使用内部urllib.request.urlopen()(至少在Python 3)。因此,您可以使用相同的方式来影响的行为urlopen。

当urlopen(params)被调用时,它实际上首先查看特殊的全局变量urllib.request._opener,如果是,None则urlopen使用默认的打开程序集来设置该变量,否则它将保留它。在下一步中,它将调用urllib.request._opener.open(<urlopen_params>)(在下一部分中,我urllib.request._opener仅称为opener)。

在opener.open()包含处理程序不同协议的列表。当opener.open()被称为那么它会做的动作:

  1. 从URL urllib.request.Request对象创建(或者,如果您直接提供,Request它将使用它)。

  2. 从Request对象中提取协议(从URL方案推导得出)。

  3. 根据协议,它将尝试查找并使用以下方法:

    • protocol_request(例如http_request)-它用于在打开连接之前对请求进行预处理。

    • protocol_open -实际上与远程服务器建立连接

    • protocol_response -处理来自服务器的响应

有关其他方法,请参阅Python的文档

对于您自己的opener,您必须执行以下三个步骤:

  1. 创建自己的处理程序

  2. 处理程序的生成列表包含您的自定义处理程序(函数urllib.request.build_opener)

  3. 将新的opener安装到urllib.request._opener(功能urllib.request.install_opener)中

对于您自己的开场白,您必须执行以下3个步骤:

这个urllib.request.build_opener创建包含自定义处理程序的打开程序,并添加默认的打开程序,但自定义处理程序继承的处理程序除外。

参考:

https://docs.python.org/3/library/urllib.request.html

本文地址: http://chenxm.cc/article/1129.html
版权声明: 本文为原创文章,版权归  陈新明  所有,欢迎分享本文,转载请保留出处!
上一篇: Django ORM between and 用法
下一篇: python3 json.dumps参数ensure_ascii=False 解决中文保存不是乱码
发表评论

还没有留言,还不快点抢沙发?