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