1.requests模块
1.1 模块说明
requests是使用Apache2 licensed许可证的http库
使用python编写的
比urllib2模块简洁
request支持http连接保持和连接池,支持使用cookie会话,支持文件上传,支持自动响应内容编码,支持国际化的URL和POST数据自动编码
在python内置模块的基础上进行了高度的封装,从而使python进行网络请求时,变得人性化,使用requests可以轻而易举的完成浏览器可有的任何操作。
requests会自动实现持久化连接keep-alive
1.2 导入模块
import requests
1.3 发送请求的简介
requests的各个请求方式
GET请求
POST请求
PUT请求
DELETE请求
HEAD请求
OPTIONS请求
获取一个网页(github)
import requests
r = requests.get('https://www.baidu.com/') #最基本的get请求
print(r.text)
1.4 传递参数
1.5 响应内容
响应内容的方式
r.encoding #获取当前的编码
r.encoding = 'utf-8 #设置编码
r.text #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行编码
r.content #以字节形式(二进制)返回。字节方式的响应体,会自动为你编码gzip和deflate压缩
r.headers #返回响应头信息(字典格式)
r.url #获取请求的url
r.status_code #响应状态码
r.raw #返回原始响应体,也就是说urllib的response对象,使用r.raw.read()
r.ok #查看.ok的布尔值便可以知道是否登录成功
#特殊处理方法
1.requests.get请求
格式
params:将参数封装到字典中
headers = {
key:value
}
params = {
key:value
}
requests.get(url,params,headers)
1.requests.POST请求
格式
data:将参数封装到字典中
headers = {
key:value
}
data = {
key:value
}
requests.post(url,data=data,headers=headers)
1.代理
1.代理:第三方代理本体执行相关的事物。生活:代购、微商、中介
2.为什么要使用代理:
- 反爬操作
- 反反爬手段
3.分类:
- 正向代理:代替客户端获取数据
- 反向代理:代理服务器端提供数据
4.免费代理ip的网站提供商
- 快代理
2.正向代理实现方式
- HTTP全局代理:环境变量方式
- HTTP全局代理:代码实现方式
- SOCKS全局代理
- 针对部分请求设置代理
1.HTTP全局代理:环境变量方式
在命令行里配置如下环境变量,然后执行Python脚本,Python在进行网络请求时就会使用配置的代理。
export http_proxy="http://127.0.0.1:1231"
export https_proxy="http://127.0.0.1:1231"
2.HTTP全局代理:代码实现方式
也可以在Python代码里添加如下内容,效果与上面的方式相同:
import os
os.environ["http_proxy"] = "http://127.0.0.1:1231"
os.environ["https_proxy"] = "http://127.0.0.1:1231"
3.SOCKS全局代理
通过设置环境变量的方式通常只能使用HTTP代理。要使用全局SOCKS代理可以使用tsocks.
安装tsocks后,编辑/etc/tsocks.conf,以使用端口为8080的本地SOCKS5代理为例:
server = 127.0.0.1
server_port = 8080
server_type = 5
4.针对部分请求设置代理代码
import requests
url = "http://www.baidu.com/s?ie=utf-8&f=8&tn=baidu&wd=ip%E5%9C%B0%E5%9D%80%E6%9F%A5%E8%AF%A2&oq=ip%25E5%259C%25B0%25E5%259D%2580%25E6%259F%25A5%25E8%25AF%25A2"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
"Accept": "*/*",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
"sec-ch-ua-platform": "Windows",
"Cookie":"BIDUPSID=A2DE97B7896600A93C9899F7C365630E; PSTM=1657353195; BAIDUID=DEA5648175D32D2D9EB7C4DA8CBD0B49:FG=1; BD_UPN=12314753; MCITY=-131%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=DEA5648175D32D2D9EB7C4DA8CBD0B49:FG=1; BA_HECTOR=050k8g25ag05ah05000g833t1hq14pd1j; ZFY=GjZ48S0Jj:AXbKNJONddmK1Jx681ORdeGbKdMWM1qvvY:C; B64_BOT=1; BD_HOME=1; H_PS_PSSID=37857_36553_37907_37866_37938_37904_26350_37958_37790_37881; BD_CK_SAM=1; delPer=0; PSINO=5; COOKIE_SESSION=405_0_8_9_0_13_1_0_8_6_2_4_0_0_0_0_0_0_1671517773%7C9%2310640476_8_1670219470%7C3; H_PS_645EC=5b0aDyabshGeFt7hvd3D4s3ZWRlvN923tSHybRLZ0RcnQn274rCGjymXgmQ; baikeVisitId=b3e0d23b-5ded-4984-8f3d-a47001ab7654; BDSVRTM=187; WWW_ST=1671517931841",
}
#正向代理配置
proxies = {
#协议:地址:端口
"http":"101.43.162.190:880"
}
#添加正向代理参数“proxies”
response = requests.get(url=url,proxies=proxies,headers=headers)
# print(response.text)
with open('./daili.html', 'wb') as f:
f.write(response.content)
5.代码打印请求ip地址
response = requests.get(...,stream=True)
ip_and_port = response.raw._connection.sock.getpeername()
print(ip_and_port)
标签:http,请求,url,代理,headers,模块,requests
From: https://www.cnblogs.com/megshuai/p/18518328