urllib库
urllib
库是python
中一个最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送请求,并且可以保存服务器发送的数据。
- urlopen函数
from urllib import request
resp = request.urlopen("http://www.baidu.com")
print(resp.read())
print(resp.read(10)) # 指定读取前10个字节
print(resp.readline()) # 读取第一行
print(resp.readlines()) # 将网页中的数据以多行的形式读取
print(resp.getcode()) # 返回当前请求的http状态码
- urlretrieve函数
说明:该函数可以方便地将网页上的一个文件保存到本地。
下载百度首页:
from urllib import request
request.urlretrieve('http://www.baidu.com/', 'baidu.html')
- urlencode函数
url中包含中文或者其他字符,当我们使用代码发送请求时,必须手动编码,这时候应该使用urlencode
来实现。urlencode
可把字典数据转换为url编码的数据
from urllib import parse
data = {'name':'爬虫基础','greet':'Hello world', 'age':100}
qs = parse.urlencode(data)
print(qs)
- parse_qs函数
可以将经过编码后的url参数进行解码
from urllib import parse
qs = "oq=%25E4%25BA%25AC%25E4%25B8%259C&rsv_pq=e25adc3c0004c5b5"
print(parse.parse_qs(qs))
- utlencode demo
from urllib import request
from urllib import parse
url = "http://www.baidu.com/s"
# 若直接写路径不进行编码,会报错
params = {"wd":"刘德华"}
qs = parse.urlencode(params)
# print(qs)
url = url + "?" + qs
resp = request.urlopen(url)
print(resp.read())
- urlparse和urlsplit
想要对url的各个组成部分进行分割时,可以用urlparse
或者urlsplit
进行分割。
from urllib import request, parse
url = "http://www.baidu.com/s?username=zhiliao"
result = parse.urlsplit(url)
# 同样可以用urlparse来完成这个功能,urlparse解析出来的比urlsplit多了params
# 比如有个url为http://www.baidu.com/s;hello?wd=python&username=abc#1
# 那么urlparse可以获取到hello,urlsplit不可以获取到。params用的比较少
# result = parse.urlparse(url)
print('scheme:', result.scheme)
print('netloc:', result.netloc)
print('path:', result.path)
print('query:', result.query)
- request.Request类
想在请求的时候增加一些请求头,那么必须使用request.Request
类来实现。比如增加一个User-Agent
, 示例代码如下:
from urllib import request
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
req = request.Request("http://www.baidu.com/", headers=headers)
resp = request.urlopen(req)
print(resp.read())