1.urllib库中request,parse的学习
1.1 简单的请求页面获取,并下载到本地 request的使用
from urllib import request
# 获取此网页的demout
resp = request.urlopen('http://www.baidu.com')
# 读出10个字符
# 结果为 b'<!DOCTYPE ' b代表bytes 是一个字节流
# '<!DOCTYPE ' 包括空格 正好十个字符
# print(resp.read(10))
# 读取一行
# 结果为 b'<!DOCTYPE html>\n'
# \n 代表换行
# ()里面可以写读几行
# print(resp.readline())
# 全部读取 二者对应的返回类型不同
# <class 'list'> readlines
# <class 'bytes'> read
# print(type(resp.readlines()))
# print(type(resp.read()))
# 下载到本地文件夹
request.urlretrieve('http://www.baidu.com', 'baidu.html')
1.2 parse的使用
1.2.1 解决中文与码的对应问题
例:中文变成码 name=%E9%AB%98%E8%BE%BE 这些带%和中文之间的转换
1 # 主要解决网址中中文是解析不了的问题
2
3 from urllib import request
4 from urllib import parse
5
6 # 中文变成码 name=%E9%AB%98%E8%BE%BE&age=21
7
8 # urlencode函数 把字典转化为字符串
9 params = {'name': '高达', 'age': '21'}
10 result = parse.urlencode(params)
11 # 结果为
12 # <class 'str'>
13 # name=%E9%AB%98%E8%BE%BE&age=21
14 print(type(result))
15 print(result)
16
17 # 如果直接在网址写中文会报错,虽然我们看到的是中文但是实际上是中文对应的码
18 # resp = request.urlopen('https://www.baidu.com/s?wd=刘德华')
19
20
21 # 写出一个字典
22 params = {'wd': '刘德华'}
23 print(params)
24 # 转化成正确的网站上的格式
25 qs = parse.urlencode(params)
26 print(qs)
27 # 这样请求就能成功
28 resp = request.urlopen('https://www.baidu.com/s?'+qs)
29 # print(resp.readlines())
30 # parse.parse_qs函数 还原解码
31 result = parse.parse_qs(qs)
32 # 结果为
33 # <class 'dict'>
34 # {'wd': ['刘德华']}
35 print(type(result))
36 print(result)
1.2.2 解析网址
# 解析网址
from urllib import parse
def test():
# 测试用的 url
url = 'http://www.baidu.com/s;sssas?wd=python&username=abc#1'
url1 = 'http://www.baidu.com/s?wd=python&username=abc#1'
url2 = 'https://api.bilibili.com/x/v2/reply?callback=jQuery17204184039578913048_1580701507886&jsonp=jsonp&pn=1&type=1&oid=70059391&sort=2&_=1580701510617'
result1 = parse.urlparse(url)
# <class 'urllib.parse.ParseResult'>
print(type(result1))
# 结果为 ParseResult(scheme='http', netloc='www.baidu.com', path='/s', params='sssas', query='wd=python&username=abc',
# fragment='1')
# print(result1)
# print('scheme:', result1.scheme)
# print('netloc:', result1.netloc)
# print('path: ', result1.path)
# print('params: ', result1.params)
# print('query: ', result1.query)
# print('fragment: ', result1.fragment)
result2 = parse.urlsplit(url)
print(result2)
# urlparse函数与 urlsplit函数的对比
# urlparse函数多一个params
result1 = parse.urlparse(url1)
result2 = parse.urlsplit(url1)
print(result1)
print(result2)
# result3 = parse.urlparse(url2)
# print('r3:', result3.query)
# 格式化输出函数
def myself_urlparse(url):
result = parse.urlparse(url)
print('scheme:', result.scheme)
print('netloc:', result.netloc)
print('path: ', result.path)
print('params: ', result.params)
print('query: ', result.query)
print('fragment: ', result.fragment)
def myself_urlsplit(url):
result = parse.urlsplit(url)
print('scheme:', result.scheme)
print('netloc:', result.netloc)
print('path: ', result.path)
print('query: ', result.query)
print('fragment: ', result.fragment)
if __name__ == '__main__':
test()
来源:https://www.cnblogs.com/gonT-iL-evoL-I/p/12258171.html