持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
requests请求模块
写在前面
一个学生,请多多关照,希望能在掘金记录自己的学习历程!❤️
请求方式
由于requests为第三方模块,使用requests时需要通过执行指令pip install requests来安装该模块,requests功能特性如下:
- Keep-Alive&连接池
- 国际化域名和URL
- 带持久Cookie的会话
- 浏览器式的SSL认证
- 自动内容解码
- Unicode响应体
- HTTP(S)代理支持
- 文件分块上传
- 流下载
- 连接超时
- 自动解压
- 支持 .netrc
- 分块请求
- 优雅的key/value Cookie
- 基本/摘要式的身份验证
GET请求
最常用的HTTP请求方式为GET和POST,GET请求时有两种方法,一种带参数,一种不带参数,以百度(www.baidu.com)为例,示例代码如下:
import requests # 导入网络请求模块requests
# 发送网络请求
response = requests.get('https://www.baidu.com')
print('响应状态码为:',response.status_code) # 打印状态码
print('请求的网络地址为:',response.url) # 打印请求url
print('头部信息为:',response.headers) # 打印头部信息
print('cookie信息为:',response.cookies) # 打印cookie信息
程序运行结果如下图所示:
获取请求地址所对应的源码
当响应状态码为200时,说明本次网络请求已成功,此时可以获取请求地址所对应的网页源码 示例代码如下:
import requests #导入模块
response = requests.get('http://www.baidu.com')
response.encoding='utf-8' #对结果进行utf-8编码
print(response.text) #打印网页源码
运行结果如下:
说明
在没有进行utf-8编码时,可能会出现乱码:
爬取二进制数据
实例下载baidu首页的logo图片
使用requests模块中的get()函数不仅可以获取网页中的源码信息,还可以获取二进制文件,但是在获取二进制文件时,需要使用Response.content属性获取bytes类型的数据,例如爬取baidu首页的logo,实例代码如下:
import requests
response = requests.get('http://www.baidu.com/img/bd_logo1.png?where=super')
print(response.content) #打印二进制数据
with open('百度logo.png','wb') as f: #通过open函数将二进制数据写入到本地文件
f.write(response.content) #写入
运行结果如下: