1、urlopen函数
在python3的urlib库中,所有和网络请求相关的方法,都在urlib.request模块下,urlopen函数的基本使用:
from urllib import request
resp = request.urlopen(‘https://www.baidu.com’)
print(resp.read())
urlopen的返回值是一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象,有 read(), deadline
readlines以及getcode()等方法。
需要注意的是,在使用了read方法后,文件的指针会指向文件的最末尾,因此,再读的时候就为空了,同样,readline
和readlines也会造成文件指针的后移。
2、urlretrieve函数
这个函数可以方便的将网页上的一个文件保存到本地
from urllib import parse
request.urlretrieve(‘http://www.baidu.com’, ‘baidu.index.html’)
3、urlencode函数
用浏览器发送请求的时候,如果url中包含了中文字符或其他特殊字符,那么浏览器会自动给我们进行编码。而如果使用代码
发送请求,那么就必须使用urlencode函数来实现,urlencode函数可以将字典数据转化成url编码的数据
from urllib import parse
data = {‘name’: ‘张三’, ‘age’: 18}
qs = parse.urlencode(data)
result:
name=%E5%BC%A0%E4%B8%89&age=18
4、parse_qs函数
可以将经过编码后的url参数进行解码
from urllib import parse
print(parse.parse_qs(qs))
result:
{‘wd’: [‘王子文’]}
5、urlparse和urlsplit:
有时候拿到一个url,想要对这个url中各自组成部分进行分割,那么我们可以用urlparse或者urlsplit来进行分割
from urllib import parse
url = ‘https://blog.csdn.net/L13259431663/article/details/99711370’
print(parse.urlparse(url))
print(parse.urlsplit(url))
a = parse.urlsplit(url)
print(a.netloc)
Result: 区别,urlparse多了个param字段
ParseResult(scheme=‘https’, netloc=‘blog.csdn.net’, path=’/L13259431663/article/details/99711370’, params=’’, query=’’, fragment=’’)
SplitResult(scheme=‘https’, netloc=‘blog.csdn.net’, path=’/L13259431663/article/details/99711370’, query=’’, fragment=’’)
6、request.Request类
-- coding: UTF-8 --
from urllib import request, parse
import requests
header = {
‘Accept’: ‘application/json, text/javascript, /; q=0.01’,
‘Content-Type’: ‘application/x-www-form-urlencoded; charset=UTF-8’,
‘Referer’: ‘https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=’,
‘Sec-Fetch-Mode’: ‘cors’,
‘User-Agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit’
‘/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36’,
‘X-Anit-Forge-Code’: ‘0’,
‘X-Anit-Forge-Token’: ‘None’,
‘X-Requested-With’: ‘XMLHttpRequest’
}
data = {
‘first’: ‘true’,
‘pn’: 1,
‘kd’: ‘Python’
}
url_new = ‘https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false’
req = request.Request(url_new, headers=header, data=parse.urlencode(data).encode(‘utf-8’), method=‘POST’)
ret = request.urlopen(req)
print(ret.read().decode(‘utf-8’))
req = requests.post(url_new, headers=header, data=data)
print(req.text)