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()