一、安装 requests 模块
pip install requests
二、使用模块
import requests as req
''' 1、GET,POST的基本语法 '''
# GET请求
response = req.get(url,params,kwargs)
# 例子:req.get(url,params={'wd':'百度'},headers=headers) # headers:字典
# POST请求
response = req.post(url,data,json,kwargs)
# 例子:req.post(urlfy,data={'wd':'百度'},headers=headers) # headers:字典
''' 2、req.request 使用 '''
proxies={'http/https':'代理服务器地址'}
# headers 包含但不限于这些内容
headers={
'Referer': '访问此网页前一个页面',
'User-Agent': '计算机、浏览器信息',
'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Cookie':'Cookie信息',
'Content-Type': 'application/x-www-form-urlencoded',
}
req.request(
method='请求的模式',
url='url',
params={key:value},# get请求内容
data={'wd':'百度'},# post请求体内容 'key=value&key1=value1'
headers=headers,
json={'已json字符串格式发起请求'}, # post请求
proxies=proxies, # 代理服务器设置
files={
f1:open('文件名',模式),
f2:('上传后的文件名',open('文件名',模式)),
},# 上次文件
auth=HttpBasioAuth('用户名','密码'),# 认证登录信息加密 自动把用户名密码放在请求头中进行提交
timeout=('发送时间','接收时间'),# 延迟时间
allow_redirects=True/False,# 是否允许重定向
stream=True/False,# 下载文件大小配置 False:下载全部;True:分段下载
cert=('证书地址.crt','证书地址.key'),# SSL证书
verfily=True/False,# 是否忽略SSL证书 False 忽略;True 不忽略
)
'''
ps:如果post提交的数据中有字典嵌套字典,用json进行数据提交,data字典中不能嵌套字典
'''
2.1、GET请求的使用
import requests
''' 1、GET方法的使用 '''
''' 1.1、设置请求头 kwargs '''
url = 'https://www.baidu.com/s'
headers = {'user-agent': 'my-app/0.0.1'}
r = req.get(url, headers=headers)
''' 1.2、设置 params '''
url = 'https://www.baidu.com/s'
headers = {'user-agent': 'my-app/0.0.1'}
r = req.get(url,pramas={'wd':'百度'},headers=headers)
# r.text 获取到响应的内容
print(r.text) # 字符串
print(r.content) # 二进制
print(r.decode('utf8')) # 解码二进制
2.2、POST请求
''' 1、POST方法的使用 '''
import requests as req
import json
headers = {'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
}
urlfy = 'https://fanyi.baidu.com/basetrans'
data = {'query': '蜘蛛', 'from': 'zh', 'to': 'en'} # 请求的数据
fanyi = req.post(urlfy,data=data,headers=headers)
print(fanyi.request.url)
json_data = json.loads(fanyi.content.decode('utf-8')) # 把json字符串转换成字典
json_data2 = json.dumps(json_data) # 把字典换成json字符串转
2.3、实用方法
# 获取解析内容的字符集
print(r.encoding)
# 获取响应的字符集
print(r.apparent_encoding)
# 获取状态码
print(r.status_code)
# 获取请求头
print(r.request.headers)
# 获取响应头
print(r.headers)
# 获取响应的url
print(r.url)
# 获取请求的url
print(r.request.url)
# 获取 cookies 信息
print(r.cookies.get_dict())
# r.text 获取到响应的内容
print(r.text) # 字符串
print(r.content) # 二进制
print(r.decode('utf8')) # 解码二进制
3、解析url地址库
# 解析url用的类库:
# python2版本:
from urlparse import urlparse
import urllib
# python3版本:
from urllib.parse import urlparse
import urllib.request
# 使用方法
urldata = 'http://www.baidu.com/s/api.php?action=query&ctitle=FA'
result = urlparse.urlparse(urldata)
print result
print urlparse.parse_qs(result.query)
# 输出:
ParseResult(scheme='http', netloc='www.baidu.com', path='/s/api.php', params='', query='action=query&ctitle=FA', fragment='')
{'action': ['query'], 'ctitle': ['FA']}
4、代理服务器的使用
''' 1、使用代理的方法 '''
proxies = {'http':'http://218.22.102.107:80'}
headers = {'user-agent': 'my-app/0.0.1'}
url = 'http://www.baidu.com'
req.get(url,proxies=proxies,headers=headers)
req.post(url,proxies=proxies,headers=headers)
4.1、代理服务器的使用思路
准备一堆的IP地址,组成IP池,然后随机悬着其中的IP进行使用
如何随机选择IP,让使用次数较少的IP地址有更大的可能被使用
-- {'IP':'ip地址','times':0}
-- [{},{},{}],对列表中的ip地址进行排序,按照使用的次数进行排序处理
-- 选择使用次数较少的若干个IP,进行随机选取使用
检测IP的可用性,使用代理IP地址时,会有很多请求时间比较长的IP,这些IP不适合使用,必须判断删除。
-- 可以使用requests添加超时参数,判断ip地址的质量
5、requests 处理 cookies session
import requests
# 实例化 session 方法
session = requests.session()
'''
实现登录的思想:
1、先用session发送请求到需要登录的网站,session自动保存cookies信息;
2、再利用session发送请求去登录网站,session会自动携带上刚刚的cookies信息去登录到网站。
不发送cookies信息登录网站:
1、返回时间过慢
2、在cookies过期之前
获取登录后页面的3种方式:
1、实例化session
2、headers 中添加 cookies 字符串
3、在请求方法中添加 cookies 参数字典
'''
session.post(url,data=data)
session.get(url,pramas=pramas)
session.request(
# 与 requests.request() 一样
)