继urllib请求库后,python有了更为强大的请求库 requests,有了它,Cookies、登录验证、代理设置等操作变得非常简单,只需要一个个参数即可实现相应的要求。
1、安装环境
pip install requests
官方地址:https://requests.readthedocs.io/en/latest/
2、实例引入
urllib库中的urlopen方法实际上是以GET方式请求网页,而requests中相应的方法就是get方法,是不是感觉表达更明确一些?下面通过实例来看一下:
测试实例:
3、GET
获取二进制数据
下面以图片为例来看一下:
如果不传递 headers,就不能正常请求:
但如果加上 headers 并加上 User-Agent 信息,那就没问题了:
4、POST请求
前面我们了解了最基本的 GET 请求,另外一种比较常见的请求方式是 POST。使用 requests 实现 POST 请求同样非常简单,示例如下:
测试网站:
- 巨潮网络数据 点击资讯选择公开信息
发送请求后,得到的自然就是响应。在上面的实例中,我们使用 text 和 content 获取了响应的内容。此外,还有很多属性和方法可以用来获取其他信息,比如状态码、响应头、Cookies 等。示例如下:
状态码常用来判断请求是否成功,而 requests 还提供了一个内置的状态码查询对象 requests.codes,示例如下:
那么,肯定不能只有 ok 这个条件码。下面列出了返回码和相应的查询条件:
5、高级用法
1.代理添加
2.快代理IP使用
打开后,默认http协议,返回格式选json,我的订单是VIP订单,所以稳定性选稳定,返回格式选json,然后点击生成链接,下面的API链接直接复制上。
3.关闭警告
流程
6、初级
7、全站采集
1.封装公共文件
创建utils文件夹,写一个base类供其他程序调用
2.案例实践
文件操作标识:
8、requests-cache
pip install requests-cache
在做的时候,我们往往可能这些情况:
- 网站比较复杂,会碰到很多重复请求。
- 有时候意外中断了,但我们没有保存状态,再次运行就需要重新进行。
样例1:
样例2:
但是,刚才我们在写的时候把 requests 的 session 对象直接替换了。有没有别的写法呢?比如我不影响当前代码,只在代码前面加几行初始化代码就完成 requests-cache 的配置呢?
这次我们直接调用了 requests-cache 库的 install_cache 方法就好了,其他的 requests 的 Session 照常使用即可。
刚才我们知道了,requests-cache 默认使用了 SQLite 作为缓存对象,那这个能不能换啊?比如用文件,或者其他的数据库呢?答案当然是可以的。
比如我们可以把后端换成本地文件,那可以这么做:
requests_cache.install_cache('demo_cache', backend='filesystem')
如果不想生产文件,可以指定系统缓存文件
requests_cache.install_cache('demo_cache', backend='filesystem', use_cache_dir=True)
requests_cache.install_cache('demo_cache', backend='filesystem', use_cache_dir=True)
另外除了文件系统,requests-cache 也支持其他的后端,比如 Redis、MongoDB、GridFS 甚至内存,但也需要对应的依赖库支持,具体可以参见下表:
Backend | Class | Alias | Dependencies |
SQLite | SQLiteCache | sqlite | |
Redis | RedisCache | redis | redis-py |
MongoDB | MongoCache | mongodb | pymongo |
GridFS | GridFSCache | gridfs | pymongo |
DynamoDB | DynamoDbCache | dynamodb | boto3 |
Filesystem | FileCache | filesystem | |
Memory | BaseCache | memory |
比如使用 Redis 就可以改写如下:
更多详细配置可以参考官方文档:https://requests-cache.readthedocs.io/en/stable/user_guide/backends.html#backends
当然,我们有时候也想指定有些请求不缓存,比如只缓存 POST 请求,不缓存 GET 请求,那可以这样来配置:
当然我们还可以匹配 URL,比如针对哪种 Pattern 的 URL 缓存多久,则可以这样写:
好了,到现在为止,一些基本配置、过期时间配置、后端配置、过滤器配置等基本常见的用法就介绍到这里啦,更多详细的用法大家可以参考官方文档:https://requests-cache.readthedocs.io/en/stable/user_guide.html