目录
第二章 基本库的使用
2.1 urllib的使用
1 发送请求
2 处理异常
3 解析链接
4 分析Robots协议
2.2 requests的使用
1 准备工作
2 实例引入
3 GET请求
4 POST请求
5 响应
6 高级用法
2.3 正则表达式
1 实例引入
2 match
3 search
4 findall
5 sub
6 compile
2.4 httpx的使用
1 示例
2 安装
3 基本使用
4 client对象
5 支持http/2.0
6 支持异步请求
第二章 基本库的使用
最基础的http包括urllib、requests、httpx。
2.1 urllib的使用
使用urllib可以实现http请求的发送,著需要指定请求的url、请求头、请求体等。此外,urllib还可以把服务器返回的响应转换为python对象。
1 发送请求
使用urllib库中的request模块,可以方便地发送请求并得到响应。
- urlopen
import urllib.requestresponse = urllib.request.urlopen('https://www.python.org')
print(response.read().decode('utf-8'))# 利用type方法输出响应的类型
import urllib.requestresponse = urllib.request.urlopen('https://www.python.org')
print(type(response))
print(response.status)
print(response.getheaders)
print(response.getheader('Server'))# urlopen方法的API
urllib.request.urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=Flase, contexy=None)
- data参数:可选,如果传递了这个参数,请求方式是post(模拟表单提交)。在添加该参数,需要使用bytes方法将参数转化为字节流编码格式的内容,即bytes类型。
运行结果:
- timeout参数,设置超时时间,单位为秒。如果请求超出了设置的这个时间,还没有得到响应,就会抛出异常。如果不指定该参数,则会使用全局默认事件。
或如下:
- 其他参数:context参数,必须是ssl.SSLContext类型,用来指定SSL的设置;cafile和capath分别用来指定CA证书和其路径;cadefault参数现在已经启用了,默认值为false。
- request
- 高级用法:handler,可以理解为各种处理器,包括登陆验证、处理cookie、处理代理设置。
- 验证:适用于启用了基本身份认证的网站
- 代理
- cookie
获取网站的cookie:
运行结果:
(输出了每条cookie条目的名称和值)
输出文件格式的内容:
1.txt格式
2.lwp格式
通过load方法读取本地的cookie文件,获取其中内容。
2 处理异常
当出现问题时,request模块便会抛出error模块中定义的异常。
- URLError
- HTTPError
3 解析链接
- urlparse
- urlunparse
- urlsplit
- urlunsplit
- urljoin
- urlencode
- parse_qs
- parse_qsl
- quote
- unquote
4 分析Robots协议
利用urllib库的robotparser模块,可以分析网站的robots协议。
- Robots协议
- 爬虫名称
- robotparser
2.2 requests的使用
1 准备工作
pip install requests
2 实例引入
3 GET请求
- 基本实例
- 抓取网页
- 抓取二进制数
- 添加请求头
4 POST请求
5 响应
6 高级用法
- 文件上传
- cookie设置
- session维持
- SSL证书验证
- 超时设置
- 身份认证
- 代理设置
- prepared request
2.3 正则表达式
1 实例引入
2 match
- 匹配目标
- 通用匹配
- 贪婪与非贪婪
- 修饰符
- 转义匹配
3 search
4 findall
5 sub
6 compile
2.4 httpx的使用
对于强制使用http2.0协议的网站,使用urllib和requests是无法爬取数据的。这时,需要要用到支持http/2.0的请求库,比较有代表性的是hyper和httpx。
1 示例
2 安装
pip install httpx
pip install 'httpx[http2]'
3 基本使用
4 client对象
5 支持http/2.0
6 支持异步请求
来源: