Requests
安装 pip install requests
官方设计原则: 让 HTTP 服务于人类
一, 常用方法
- import requests
- url = "http://www.httpbin.org/get"
- headers = {
- "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) ApplewebKit/537.36 (Khtml, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
- }
- res = requests.get(url, headers=headers)
- print(res.encoding) # 获取字符编码
- print(res.text) # 获取 HTML 字符串
- print(res.content) # 以二进制形式打开
- print(res.status_code) # 获取响应状态码
- print(res.url) # 获取响应 URL
汇总:
- encoding # 响应字符编码
- text # 字符串
- content # 字节流
- status_code # HTTP 响应码
- url # 实际数据的 URL 地址
示例:
保存图片到本地
url 为 https://inews.gtimg.com/newsapp_bt/0/10186045426/1000
- import requests
- url = "https://inews.gtimg.com/newsapp_bt/0/10186045426/1000"
- headers = {"User-Agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E"}
- res = requests.get(url=url, headers=headers).content
- with open("demo.jpg", "wb") as f:
- f.write(res)
字符编码也是使用 urllib.parse.urlencode()
- 1. GET
- requests.get()
- 1.1 params
查询参数
1.1.1 参数类型
字典类型, 字典中键值对作为查询参数
- params = {
- "kw":"泰勒. 斯威夫特吧"
- "pn":50
- }
无需编码, requests 模块会将其封装好请求
1.1.2 使用方法
res = requests.get(url, params, headers=headers)
1.1.3 特点
URL 为基准的 URL 地址, 不包含查询参数
该方法会自动对 params 字典编码, 然后和 url 拼接
1.1.4 示例
- import requests
- # 基准的 URL 地址
- base_url = "http://www.baidu.com/s?"
- # 查询参数
- params = {
- "kw":"泰勒. 斯威夫特吧",
- "pn":50
- }
- # 请求头
- headers = {
- "User-Agent":"Mozilla/5.0"
- }
- res = requests.get(url=base_url, params=params, headers=headers)
- print(res.content.decode("utf-8", "ignore"))
- 1.2 auth
Web 客户端认证
1.2.1 特点
针对于需要 Web 客户端用户名密码认证的网站
auth = ('username','password')
1.2.3 使用
- import requests
- from config import *
- base_url = "http://code.tarena.com.cn/AIDCode/aid1903/12-spider/spider_day{}_note.zip"
- auth = (USERNAME, PASSWD)
- headers = {"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3895.5 Safari/537.36"}
- def down():
- for day in range(1,11):
- day = str(day).zfill(2)
- url = base_url.format(day)
- try:
- res = requests.get(url=url, auth=auth, headers=headers).content
- filename = url.split("/")[-1]
- with open(filename, "wb") as f:
- f.write(res)
- print(filename, "OK")
- except Exception:
- print("资源不存在")
- down()
- # 配置文件
- USERNAME = ""PASSWD =""
- 1.3 verify
证书认证参数
1.3.1 使用场景
适用网站: https 类型网站但是没有经过 证书认证机构 认证的网站
适用场景: 抛出 SSLError 异常则考虑使用此参数
1.3.2 参数类型
verify=True(默认) : 检查证书认证
verify=False(常用): 忽略证书认证
1.3.3 示例
- response = requests.get(
- url=url,
- params=params,
- headers=headers,
- verify=False
- )
- 1.4 proxies
代理参数
爬虫反爬之代理 IP
2. POST
携带 form-data 请求 server
控制台介绍
打开浏览器, F12 打开控制台, 找到 Network 选项卡
控制台常用选项
Network: 抓取网络数据包
ALL: 抓取所有的网络数据包
XHR: 抓取异步加载的网络数据包
JS : 抓取所有的 JS 文件
Sources: 格式化输出并打断点调试 JavaScript 代码, 助于分析爬虫中一些参数
Console: 交互模式, 可对 JavaScript 中的代码进行测试
抓取具体网络数据包后
单击左侧网络数据包地址, 进入数据包详情, 查看右侧
右侧:
Headers: 整个请求信息
General,Response Headers,Request Headers,Query String,Form Data
Preview: 对响应内容进行预览
Response: 响应内容
- 2.1data
- data = {
- key:value
- } # 构造 form-data
- response = requests.post(url,data=data,headers=headers)
- # data :post 数据 (Form 表单数据 - 字典格式)
2.1.1 特点
GET 请求 : 参数在 URL 地址中有显示
POST 请求: Form 表单提交数据
2.1.2 案例
有道翻译破解案例 (post)
有道翻译
二, 高级用法
1. 会话保持
步骤:
寻找 POST 地址 (一般在 form 表单的 action 属性)
发送用户名和密码, 用 session 保持登录
步骤:
实例化 session 对象
session = requests.session()
POST 表单中的 action 地址, 注意携带 data
GET 主页地址
- # 实例化 session 对象
- session = requests.session()
- # 先 POST form 中的 action 地址
- session.post(url=post_url, data=data, headers=headers)
- # 再 GET
- HTML = session.get(url=get_url, headers=headers).text
来源: https://www.cnblogs.com/chancey/p/11510042.html