自己电脑做主机怎么做网站,seo怎么发外链的,东莞网站设计公司排名,建设工程交易中心是什么机构1 设置IP代理
1.1 方法论述
使用urllib模块设置代理IP是比较简单的#xff0c;首先需要创建ProxyHandler对象#xff0c;其参数为字典类型的代理IP#xff0c;键名为协议类型#xff08;如HTTP或者HTTPS)#xff0c;值为代理链接。然后利用ProxyHandler对象与buildopene…1 设置IP代理
1.1 方法论述
使用urllib模块设置代理IP是比较简单的首先需要创建ProxyHandler对象其参数为字典类型的代理IP键名为协议类型如HTTP或者HTTPS)值为代理链接。然后利用ProxyHandler对象与buildopener()方法构建一个新的opener对象最后再发送网络请求即可。
1.2 代码实现
import urllib.request # 导入urllib.request模块
url https://www.httpbin.org/get # 网络请求地址# 创建代理IP
proxy_handler urllib.request.ProxyHandler({https:58.220.95.114:10053
})# 创建opener对象
opener urllib.request.build_opener(proxy_handler)
response opener.open(url,timeout2) # 发送网络请求
print(response.read().decode(utf-8)) # 打印返回内容
2 处理请求异常
在实现网络请求时可能会出现很多异常错误ulib模块中的urllib.error模块包含了URLError与HTTPError两个比较重要的异常类。
2.1 处理URLError异常
URLError类中reason属性可以反馈异常的原因
2.1.1 向不存在的地址发送请求
import urllib.request # 导入urllib.request模块
import urllib.error # 导入urllib.error模块
try:# 向不存在的网络地址发送请求response urllib.request.urlopen(http://www.52pojie.cn/4040.html)
except urllib.error.URLError as error: # 捕获异常信息print(error.reason) # 打印异常原因print(error.code) # 打印HTTP状态码print(error.header) # 返回请求头
2.1.2 双重异常捕获
import urllib.request # 导入urllib.request模块
import urllib.error # 导入urllib.error模块
try:# 向不存在的网络地址发送请求response urllib.request.urlopen(https://www.python12.org/,timeout0.1)
except urllib.error.HTTPError as error: # HTTPError捕获异常信息print(状态码为,error.code) # 打印状态码print(HTTPError异常信息为,error.reason) # 打印异常原因print(请求头信息如下\n,error.headers) # 打印请求头
except urllib.error.URLError as error: # URLError捕获异常信息print(URLError异常信息为,error.reason)# 输出 URLError异常信息为 [Errno 11001] getaddrinfo failed
3 解析URL
urllib模块中提供了parse子模块主要用于解析URL,可以实现URL的拆分或者是组合。它支持多种协议的URL处理。
3.1 urlparse()
3.1.1 urlparse()简介 urlparse()用于将URL分解成不同部分 3.1.2 urlparse()函数构成 urllib.parse.urlparse (urlstring,scheme ,allow_fragmentsTrue)
urlstring需要拆分的URL该参数为必选参数。scheme可选参数表示需要设置的默认协议。如果需要拆分的URL中没有协议可以通过该参数设置一个默认的协议该参数的默认值为空字符串。allow_fragments可选参数如果该参数设置为False,表示忽略fragment这部分内容默认为Tnue。
3.1.3 使用urlparse()分解URL
import urllib.parse #导入urllib.parse模块
parse_result urllib.parse.urlparse(https://www.baidu.com/doc/library/urllib.parse.html)
print(type(parse_result)) # 打印类型
print(parse_result) # 打印拆分后的结果
### 也可以拆分打印
print(parse_result.scheme) # 打印拆分后的结果
print(parse_result.netloc) # 打印拆分后的结果
print(parse_result.path) # 打印拆分后的结果
print(parse_result.params) # 打印拆分后的结果
print(parse_result.query) # 打印拆分后的结果
print(parse_result.fragment) # 打印拆分后的结果 class urllib.parse.ParseResult ParseResult(schemehttps, netlocwww.baidu.com, path/doc/library/urllib.parse.html, params, query, fragment) https www.baidu.com /doc/library/urllib.parse.html 3.2 urlsplit()
3.2.1 urlsplit()简介
使用urlsplit()方法与urlparse()方法类似可以实现URL的拆分只是urlsplit()方法不再单独拆分params这部分内容而是将params合并到path中所以返回的结果中只有5部分内容并且运数据类型为SplitResult。示例代码如下
3.2.2 urlsplit()代码实现
import urllib.parse #导入urllib.parse模块
# 需要拆分的URL
url https://www.baidu.com/doc/library/urllib.parse.html
print(urllib.parse.urlsplit(url)) # 使用urlsplit()方法拆分URL
# 输出 SplitResult(schemehttps, netlocwww.baidu.com, path/doc/library/urllib.parse.html, query, fragment)
print(urllib.parse.urlparse(url)) # 使用urlparse()方法拆分URL
# 输出ParseResult(schemehttps, netlocwww.baidu.com, path/doc/library/urllib.parse.html, params, query, fragment)4 组合URL
4.1 urlunparse()
使用urlunpare()方法组合URL时需要注意可迭代参数中的元素必须是6个
import urllib.parse #导入urllib.parse模块
list_url [https,baidu.org,/3/library/urllib.parse.html,,,]
tuple_url (https,baidu.org,/3/library/urllib.parse.html,,,)
dict_url {scheme:https,netloc:docs.baidu.org,path:/baidu/library/urllib.parse.html,params:,query:,fragment:}
print(组合列表类型的URL,urllib.parse.urlunparse(list_url))
print(组合元组类型的URL,urllib.parse.urlunparse(tuple_url))
print(组合字典类型的URL,urllib.parse.urlunparse(dict_url.values())) 输出 组合列表类型的URL https://baidu.org/3/library/urllib.parse.html 组合元组类型的URL https://baidu.org/3/library/urllib.parse.html 组合字典类型的URL https://docs.baidu.org/baidu/library/urllib.parse.html 4.2 urlunsplit()
import urllib.parse #导入urllib.parse模块
list_url [https,docs.python.org,/3/library/urllib.parse.html,,]
tuple_url (https,docs.python.org,/3/library/urllib.parse.html,,)
dict_url {scheme:https,netloc:docs.python.org,path:/3/library/urllib.parse.html,query:,fragment:}
print(组合列表类型的URL,urllib.parse.urlunsplit(list_url))
print(组合元组类型的URL,urllib.parse.urlunsplit(tuple_url))
print(组合字典类型的URL,urllib.parse.urlunsplit(dict_url.values())) 输出 组合列表类型的URL https://docs.python.org/3/library/urllib.parse.html 组合元组类型的URL https://docs.python.org/3/library/urllib.parse.html 组合字典类型的URL https://docs.python.org/3/library/urllib.parse.html 5 URL的连接urllib.parse.urljoin()
5.1 函数原型
urllib.parse.urljoin(base,url,allow_fragments True)
base表示基础链接url表示新的链接allow_fragments可选择参数默认为True
5.2 使用urllib.parse.urljoin()实例
import urllib.parse #导入urllib.parse模块
base_url https://tet.baidu.org # 定义基础链接
# 第二参数不完整时,合并返回
print(urllib.parse.urljoin(base_url,3/library/urllib.parse.html))
# 第二参数完成时不合并直接返回第二参数的链接
print(urllib.parse.urljoin(base_url,https://docs.tet.baidu.org/3/library/urllib.parse.html#url-parsing))输出 https://tet.baidu.org/3/library/urllib.parse.html https://docs.tet.baidu.org/3/library/urllib.parse.html#url-parsing 6 URL的解码与编码
quote()方法与urlencode()方法所实现的功能类似但是urlencode()方法中只接收字典类型的参数quote()方法则可以将一个字符串进行编码。
6.1 使用urlcode()方法编码请求参数
import urllib.parse #导入urllib.parse模块
base_url http://baidu.org/get? # 定义基础链接
params {name:Jack,country:中国,age:30} # 定义字典类型的请求参数
url base_urlurllib.parse.urlencode(params) # 连接请求地址
print(编码后的请求地址为,url) 编码后的请求地址为 http://baidu.org/get?nameJackcountry%E4%B8%AD%E5%9B%BDage30 6.2 使用quote()方法编码字符串参数
import urllib.parse #导入urllib.parse模块
base_url http://baidu.org/get?country # 定义基础链接
url base_urlurllib.parse.quote(中国) # 字符串编码
print(编码后的请求地址为,url) 编码后的请求地址为 http://baidu.org/get?country%E4%B8%AD%E5%9B%BD 7 解码
7.1 代码1
import urllib.parse #导入urllib.parse模块
u urllib.parse.urlencode({country:中国}) # 使用urlencode编码
qurllib.parse.quote(country中国) # 使用quote编码
print(urlencode编码后结果为,u)
print(quote编码后结果为,q)
print(对urlencode解码,urllib.parse.unquote(u))
print(对quote解码,urllib.parse.unquote(q))7.2 代码2
import urllib.parse #导入urllib.parse模块
# 定义一个请求地址
url http://httpbin.org/get?nameJackcountry%E4%B8%AD%E5%9B%BDage30
q urllib.parse.urlsplit(url).query # 获取需要的参数
q_dict urllib.parse.parse_qs(q) # 将参数转换为字典类型的数据
print(数据类型为,type(q_dict))
print(转换后的数据,q_dict)7.3 代码3
import urllib.parse #导入urllib.parse模块
str_params nameJackcountry%E4%B8%AD%E5%9B%BDage30 # 字符串参数
list_params urllib.parse.parse_qsl(str_params) # 将字符串参数转为元组所组成的列表
print(数据类型为,type(list_params))
print(转换后的数据,list_params)