一、urllib
urllib 类似于 python 底层构建请求,构建相对于其他的库来说较为复杂,不过 urllib 解析链接非常好用
1. urlparse 实现 URL 的识别和分段
如果需要合并 params 和 query 可以使用 urlsplit
from urllib.parse import urlparse
urlparse('https://www.baidu.com/')
# ParseResult(scheme='https', netloc='[www.baidu.com](https://www.baidu.com/)', path='/', params='', query='', fragment='')
2. urlunparse 用于构造 URL
urlunparse 这个方法接收的参数是一个可迭代对象,且其长度必须为 6;同样的,如果需要合并 params 和 query 可以使用 urlunsplit
from urllib.parse import urlunparse
data = ['https','www.baidu.com','index.html','user','a=6','comment']
urlunparse(data)
# https://www.baidu.com/index.html;user?a=6#comment
3. urljoin 用于两个链接的拼接
urljoin 首先会解析 new_url,判断其 scheme,netloc,path 是否出现了缺失,如果确实使用 base_url 中的 scheme,netloc,path 对应缺失部分代替;
from urllib.parse import urljoin
base_url = 'https://www.baidu.com'
new_url = 'FAQ.html'
urljoin(base_url, new_url)
# https://www.baidu.com/FAQ.html
4. urlencode 将 params 字典序列化为 params 字符串
from urllib.parse import urlencode
params = {
'name': 'germey',
'age': 2,
}
base_url = 'https://www.baidu.com?'
base_url + urlencode(params)
# https://www.baidu.com?name=germey&age=2
5. parse_qs 和 parse_qsl 用于将 params 字符串反序列化为 params 字典或列表
from urllib.parse import parse_qs, parse_qsl
params = 'name=germey&age=25'
parse_qs(params, separator='&')
# {'name': ['germey'], 'age': ['25']}
parse_qsl(params, separator='&')
[('name', 'germey'), ('age', '25')]
6. quote 和 unquote 对 URL的中文字符进行编码和解码
from urllib.parse import quote, unquote
url = "https://www.baidu.com/s?wd=爬虫"
# utf8编码,指定安全字符
quote(url, safe=";/?:@&=+$,", encoding="utf-8")
# https://www.baidu.com/s?wd=%E7%88%AC%E8%99%AB
# gbk编码,指定安全字符
quote(url, safe=";/?:@&=+$,", encoding="gbk")
# https://www.baidu.com/s?wd=%C5%C0%B3%E6
# utf8解码
unquote('https://www.baidu.com/s?wd=%E7%88%AC%E8%99%AB', encoding='utf-8')
# https://www.baidu.com/s?wd=爬虫
# gbk解码
unquote('https://www.baidu.com/s?wd=%C5%C0%B3%E6', encoding='gbk')
# https://www.baidu.com/s?wd=爬虫
二、requests
1. GET 请求
测试 URL: www.httpbin.org/get
cookies 可以单独设置,也可以放在 headers 的 cookie 字段下传入请求之中,timeout 可以控制超时时间,headers 是请求头,params 是参数构建完整的 url;
import requests
params = {
}
headers = {
}
cookies = {
}
# vertify 设置为 False 可以避免 ssl 认证
requests.get(url