urllib的使用
1. response = urllib.request.urlopen(url, [data=None, timeout=...])
- url: 请求的url
- data: 请求的data, 如果设置了这个值,那么将变成post请求
- response返回值:返回值是一个
http.client.HTTPResponse
对象,这个对象是一个类文件句柄对象, 有如下方法:- read([size]): 读取指定字节大小的数据,默认为读取全部内容
- readline(): 读取一行
- readlines(): 一交读取一行,直到读取完所有数据,返回一个列表
- getcode(): 响应状态码
from urllib import request
response = request.urlopen('http://httpbin.org/get')
# response.read(1024) # 读取全部 # response.readline() # 读取一行 # print(type(response)) print(response.readlines()) # 读取多行 print(response.getcode())
[b'{\n', b' "args": {}, \n', b' "headers": {\n', b' "Accept-Encoding": "identity", \n', b' "Host": "httpbin.org", \n', b' "User-Agent": "Python-urllib/3.6", \n', b' "X-Amzn-Trace-Id": "Root=1-5e351708-72df268451f52bfe8d6e281a"\n', b' }, \n', b' "origin": "180.137.6.157", \n', b' "url": "http://httpbin.org/get"\n', b'}\n'] 200
2. urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)
可以方便的将网上的文件保存到本地
request.urlretrieve('https://dss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1208538952,1443328523&fm=26&gp=0.jpg', './1.png')
('./1.png', <http.client.HTTPMessage at 0x1ebf1561e48>)
3. urllib.parse.urlencode(): 将字典进行编码; urllib.parse.quote(): 将字符串(汉字)进行编码
url中如果包含了中文,则需要编码,urlencode 可以把字典数据转换为url编码的数据
from urllib import parse
data = {'name': '成'} qs = parse.urlencode(data) print(qs) print(parse.quote('成'))
name=%E6%88%90 %E6%88%90
4. urllib.parse.parse_qs()
将编码后的字符串进行解码
qs = 'name=%E6%88%90' parse.parse_qs(qs)
{'name': ['成']}
5. urllib.parse.urlparse(url) 和 urlsplit(url)
对url 的各个组成部分进行分割, 两个基本上是一样的, 唯一不同的是urlparse多了一个params属性
url = "https://www.baidu.com/s?name=cheng&wd=python" print(parse.urlparse(url)) print('*'*30) print(parse.urlsplit(url))
ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='name=cheng&wd=python', fragment='') ****************************** SplitResult(scheme='https', netloc='www.baidu.com', path='/s', query='name=cheng&wd=python', fragment='')
6. urllib.request.Request 类
如果想要在请求的时候增加一些请求头,那么就必须使用 request.Request 类来实现。如增加一个 User-Agent
url = 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36' } # 构建 req 对象 req = request.Request(url, headers=headers) # 没有添加上请求头的话,对方服务器就会识别出你是非法的请求 response = request.urlopen(req) # response.read().decode()
# 发送 post 请求 def post_lagou(): data = { 'user': 'long', 'hello': '世界你好' } data = parse.urlencode(data).encode('utf-8') print(data) url = "http://httpbin.org/post" req = request.Request(url, data=data, headers=headers, method='POST') response = request.urlopen(req) print(response.read().decode('utf-8')) # post_lagou()
来源:https://www.cnblogs.com/nichengshishaonian/p/12249186.html