urllib 库是 python 中的一个基本网络请求库. 用于模拟浏览器的行为, 向指定服务器发送请求, 并接收返回的数据.
在 python3 中所有的网络请求相关函数都集中在 urllib.request 模块下面
urlopen 函数
向服务器发起请求
urlopen 函数的参数
url 目标地址
data 如果有这个参数, 将变为 post 请求
返回值 http.client.HTTPResponse 对象, 其中含有下面几个方法:
read(size) size 为空则读取所有
readline() 读取一行
readlines() 读取多行
getcode() 读取状态值
基本的使用:
- from urllib import request
- res = request.urlopen("http://www.baidu.com")
- print(res.read())
urlretrieve 函数
这个函数可以方便的将网页的一个文件保存到本地.
urlretrieve 函数的参数
url 目标地址
下载路径
基本使用
- from urllib import request
- request.urlretrieve("http://www.baidu.com","index.html") #下载百度首页到 index.HTML
urlencode 函数
用于完成 url 中中文以及特殊字符的编码和解码
基本使用:
- from urllib import parse
- params = {
- "name": "张三",
- "age": 14,
- "地址": "上海市海河大道 1544 弄 3 号楼 302"
- }
- res = parse.urlencode(params)
- print(res)
执行结果:
age=14&name=张三&地址=上海市海河大道1544弄3号楼302
在百度上搜索刘德华
- from urllib import request
- from urllib import parse
- # request.urlopen("http://www.baidu.com/s/?wd = 刘德华") #直接这样请求会报错
- url = "http://www.baidu.com/s/?"
- # 定义参数字典
- params = {
- "wd": "刘德华"
- }
- # 参数转码
- qs = parse.urlencode(params)
- # url 拼接
- url += qs
- # 发送请求
- res = request.urlopen(url)
- print(res.read())
parse_qs 函数
将已经编码的 url 进行解码
基本使用
- from urllib import parse
- qs = "age=14&name=张三&地址=上海市海河大道1544弄3号楼302"
- res = parse.parse_qs(qs)
- print(res)
执行结果
{'name': ['张三'], 'age': ['14'], '地址': ['上海市海河大道 1544 弄 3 号楼 302']}
urlparse 和 urlsplit 函数
用于将 url 各个部分进行分割
基本使用
- from urllib import parse
- url = "http://www.baidu.com/s/?wd=python"
- res = parse.urlsplit(url)
- print(res)
- res = parse.urlparse(url)
- print(res)
执行结果:
- SplitResult(scheme='http', netloc='www.baidu.com', path='/s/', query='wd=python', fragment='')
- ParseResult(scheme='http', netloc='www.baidu.com', path='/s/', params='', query='wd=python', fragment='')
可以发现两个结果基本相同, 唯一不同的是 urlsplit() 函数返回结果没有 params 属性
request.Request 类
如果需要在请求中添加 header 信息, 则必须用 request.Request 类实现
基本使用:
- # 通过构造请求头 获取拉勾网的招聘信息
- from urllib import request
- from urllib import parse
- url = "https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false"
- headers = {
- 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) ApplewebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
- 'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
- "Cookie": "_ga=GA1.2.620765502.1560083999; _gid=GA1.2.758158058.1560083999; user_trace_token=20190609203959-b18d608c-8ab3-11e9-a228-5254005c3644; LGUID=20190609203959-b18d64d3-8ab3-11e9-a228-5254005c3644; index_location_city=全国; JSESSIONID=ABAAABAAAIAACBI2C1935D6770E19BC5BE4390354414026; X_HTTP_TOKEN=b6c2ab256a325419948821065120ec66a55a5e4b49; _gat=1; LGSID=20190610090729-1e5547bf-8b1c-11e9-a22c-5254005c3644; PRE_UTM=; PRE_HOST=; PRE_SITE=; PRE_LAND=https://www.lagou.com/; LGRID=20190610090729-1e5549e6-8b1c-11e9-a22c-5254005c3644; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1560084000,1560090525,1560128850; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1560128850; TG-TRACK-CODE=index_search; SEARCH_ID=60cd24c737344a6f98c48dd4fc94c39c"
- }
- data = {
- "first": "true",
- "pn": 1,
- "kd": "python"
- }
- req = request.Request(url, headers=headers, data=(
- parse.urlencode(data)).encode("utf-8"), method="POST")
- resp = request.urlopen(req)
- print(resp.read().decode("utf-8"))
posted on 2019-06-10 10:25 一点飞鸿影下 阅读 (...) 评论 (...) 编辑 收藏
来源: https://www.cnblogs.com/asia9847/p/10996332.html