简介
Requests是一个优雅而简单的Python HTTP库
Requests的使用方式非常的简单、直观、人性化,让程序员的精力完全从库的使用中解放出来。
发起请求–10大参数
GET请求
import requests
res= requests.get( )
# 参数及作用:
url = ' ' 目标网址
params = { } 请求参数 在requests中自动转ascii码
headers = { } 请求头
cookies = { } cookies
timeout = 1 设置请求超时时间
allow_redirects = True 重定向(False为关闭)
proxies = { } 使用代理
verify = True 开启证书验证(False为关闭)
POST请求
import requests
res= requests.post( )
# 上述GET参数也适用于POST
data = { } 自动转ascii码
json = { } 有data参数, json数据默认为null
小结:requests库每一个请求方法都有一个对应的API接口,比如GET请求就可以使用get()方法
比如还有put()、delete()、head()、options()等方法,这里暂不介绍
关闭证书验证后,会有一个warning,可使用以下方法关闭警告
# 导包
from requests.packages.urllib3.exceptions import InsecurRequestWarning
# 屏蔽安全请求警告
requests.packages.urllib3.disable_warnings( )
响应的查看
res.encoding = 'utf-8' 指定 字符串输出格式编码
res.text 将相应内容直接转换成字符串 非字节码
res.content 查看图片等二进制数据数据,使用此参数
res.status_code 查看状态码
res.json( )["headers"]["user-Agent"] json数据处理,自动转成字典格式
res.headers
res.cookies
res.url
res.requests.url 请求url
res.requests.headers 请求头信息
requests库中的session对象
import requests
headers = { } 初始请求头
session = requests.session( ) 创建session对象
session.headers = headers 更新请求头信息(包含cookies)
res = session.get( url ) 发起请求
# 使用session会根据目标url自动更新请求头,常用于账号登录。
案例
实现下载多页百度图片
import re
import os
import requests
url = 'https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E8%AE%B8%E4%BD%B3%E7%90%AA'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4209.2 Safari/537.36",
}
res = requests.get(url, headers=headers)
img_urls = re.findall(r'"thumbURL":"(.*?)"', res.text, re.S)
for index,img_url in enumerate(img_urls):
if not os.path.exists('kikiki'):
os.mkdir('kikiki')
filename = 'kikiki/' + str(index) + '.jpg'
res = requests.get(img_url, headers=headers)
data = res.content
with open(filename, 'wb') as f:
f.write(data)
def save_image(i,a):
for index,img_url in enumerate(img_urls):
if not os.path.exists('kikiki'+ str(i)):
os.mkdir('kikiki'+ str(i))
# 如果需要保存到指定位置,可在前边指定路径
filename = 'kikiki'+ str(i)+'/'+str(index) + '.jpg'
res = requests.get(img_url, headers=headers)
data = res.content
with open(filename, 'wb') as f:
f.write(data)
next_url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=7636996772203065950&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E8%AE%B8%E4%BD%B3%E7%90%AA&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=©right=&word=%E8%AE%B8%E4%BD%B3%E7%90%AA&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&1604055503940='
# 此处左闭右开,只能取3页,可根据自己需求进行调整
for i in range(1, 4):
new_url = next_url.format(str(i*30))
res = requests.get(new_url, headers=headers)
img_urls = re.findall(r'"thumbURL":"(.*?)"', res.text, re.S)
save_image(i,img_urls)
效果
关于代理和UA池后续会做介绍,此案例仅用于学习、分享,少量下载,得取技术为重。
对案例代码有疑问或建议之处,欢迎私信或评论。
更多详细内容请见官方文档
官方文档:http://cn.python-requests.org/zh_CN/latest/
英文文档:http://docs.python-requests.org/en/master/api/