requests模块----这是一个强硬的手段,有多强呢?看看你就知道了

简介: requests模块----这是一个强硬的手段,有多强呢?看看你就知道了

     开始了

requests模块简单介绍

1.requests模块作为爬⾍中最常⽤的⼀个模块,一个让爬虫小白能快速接受的模块,


可能之前看过⼀些教程的⼩可爱在想,为什么不是从urllib开始,⽽是从

requests模块开始,原因有以下⼏点

● 1.requests的底层实现就是urllib

● 2.requests在Python2和Python3通⽤,⽅法完全⼀样

● 3.requests简单易⽤

简单了解一下我们访问网页的情况

4b7cb44736d547e0bdbd75e5892657c0.png


我们是通过发送请求给服务器,然后服务器响应返回数据,而requetst就是模拟浏览器发送请求,


简单理解为:发送⽹络请求,返回相应数据


下面开始使用requests前我把我的思路以画图的形式表达出来:

a4d6d9b42dd041878c2e55f09a761c3e.png



下面我们要干事情,要先知道怎么干,第一步:


下载模块requests:


6d2fedc825344c6dbf14bc210f9acbf2.png


发送简单的get请求

下面开始我们的简单代码:


url="https://www.baidu.com/?tn=02003390_19_hao_pg"

import  requests
url="https://www.baidu.com/?tn=02003390_19_hao_pg"
header={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
}
# 发送请求
response=requests.get(url)
print(response)
response.encoding="utf-8"
print(response.text)


67fdcca28764457c82001373ce32b6fb.png

32bcac31b8164617beddb2c868914e41.png



encoding是为了设计返回数据编码格式和接受的数据编码格式相一致

text是获取服务器返回数据html   类型为字符串

获取数据的还有content   json()


返回响应状态码


返回部分请求头


返回全部请求头


content 获取数据(返回字节数据)

a16d7b0ed60c47eb965c178124674921.png


content.decode()    等同于 text  返回类型为字符串

把字节转换为字符串

19ae3db6184b4c69afc408541b333a3b.png



 json()就是把json数据转换成python的数据类型

下面代码如下:

import  requests
url="https://www.woaifanyi.com/api/2.0/save/?ajaxtimestamp=1685158773961"
header={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
}
data={
    "source": "你好",
    "from": "1",
    "to": "2"
}
# 发送请求
response=requests.post(url,data=data,headers=header)
print(response)
print(response.json())
print(response.request.headers)

2ad0c8a96d28477e90429f516d64f58d.png



这里用到了post(),这个和get()的大致用法相同 唯一不同的就是data参数


返回响应对应的 请求头

response.request.headers


4c9bed935ce04dec9caa3154c3645049.png

返回全部响应头

headers


2516a910525845a293ea007d9826e12b.png

发送带header的请求

可以看出上面返回的是一个部分HTML的数据,但实际却是比这个多了很多


为了防止出现这样的情况,我们可以加一个请求头


import  requests
url="https://www.baidu.com/?tn=02003390_19_hao_pg"
header={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
}
# 发送请求
response=requests.get(url,headers=header)
print(response)
response.encoding="utf-8"
print(response.text)

这样就可以获取整个页面的数据,但只是获取到静态页面的数据,动态的数据靠这个却很难(后面我会发出怎么获取动态页面的数据)


发送POST请求

前面json()时候我用来post()来演示


这里不花费时间


cookies参数的使⽤

cookie可以理解为用户信息,就好比我们登录QQ时有段时间不会让我们手动登录,就是因为qq软件有我们的cookie信息


使用:可以加在header里面一起发送过去


f3762eae559444888e6bd7f1c182f01e.png


代码如下:


有些小可爱可能觉得写cookie有一点难写,这个网址可以解决    ,https://spidertools.cn/#/formatHeader


import  requests
url="http://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_web_fanyi&sign=0d2d6b4f80839676"
header={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
    "cookie":"XXXXXXXXXXX"
}
# 发送请求
response=requests.get(url,headers=header)
print(response)
response.encoding="utf-8"
# print(response.text)
# print(response.content.decode())
# print(response.status_code)
# print(response.json())


cookie和session区别

cookie数据存放在客户端的浏览器上,session数据放在服务器上。

cookie不是很安全,别⼈可以分析存放在本地的cookie并进⾏cookie欺骗

session会在⼀定时间内保存在服务器上。当访问增多,会⽐较占⽤你服务

器的性能

单个cookie保存的数据不能超过4K,很多浏览器都限制⼀个站点最多保存

20个cookie

使⽤代理

1.让服务器以为不是同⼀个客户端在请求

2.防⽌我们的真实地址被泄露,防⽌被追究

代理IP可以分为三类

1.透明代理(知道你使用代理ip,能查到ni)

2.匿名代理(知道你使用代理ip,但查不到你)

3.⾼匿代理(不知道你使用代理IP,又查不到你)

代码如下:

import  requests
url="http://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_web_fanyi&sign=0d2d6b4f80839676"
header={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
    "cookie":"XXXXXXXXXXX"
}
proxies={
    "http":"http://117.191.11.112",
    "https":"http://117.191.11.112"
}
# 发送请求
response=requests.get(url,headers=header,proxies=proxies)
print(response)
response.encoding="utf-8"


当代理IP不行时会报错:


75c0c25f07a74a328c193ecea74743d1.png


在请求的时候,代理IP请求时间太长了,有写小可爱就会烦了,所有我们可以添加一个响应时间,最多等待多久


设置请求超时时间

import  requests
url="http://ifanyi.iciba.com/index.php?c=trans&m=fy&client=6&auth_user=key_web_fanyi&sign=0d2d6b4f80839676"
header={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
    "cookie":"XXXXXXXXXXX"
}
proxies={
    "http":"http://117.191.11.112",
    "https":"http://117.191.11.112"
}
# 发送请求
response=requests.get(url,headers=header,proxies=proxies,timeout=10)
print(response)
response.encoding="utf-8"


timeout=10  代表最多等待10秒       !    !    !    不是强行等待10秒


请求SSL证书

我们在访问某些⽹站的时候,可能会遇到这种情况,如果我们这个时候⽤

requests模块去请求的话,⼀样是得不到结果的,原因是该⽹站的CA证书没有

经过【受信任的根证书颁发机构】的认证

方法:

我们在⽤requests请求的时候加上参数

verify=False

response = requests.get('https://inv-veri.xxxx.gov.cn/',verify=False)

总结:

requests模块可以模拟浏览器访问网页,但是如果针对一些动态网页就不行了,以上是我的个人分享情况,

相关文章
|
4月前
|
机器学习/深度学习 Java 开发工具
【能力展现】魔改ZXING源码实现商业级DM码检测能力
【能力展现】魔改ZXING源码实现商业级DM码检测能力
115 1
|
2月前
|
存储 缓存 NoSQL
【性能飙升的秘密】FastAPI应用如何借助缓存技术实现极速响应?揭秘高效Web开发的制胜法宝!
【8月更文挑战第31天】FastAPI是一个高性能Web框架,利用Starlette和Pydantic实现高效API构建。本文介绍如何通过缓存提升FastAPI应用性能,包括使用`starlette-cache[redis]`实现Redis缓存,以及缓存一致性和缓存策略的注意事项。通过具体示例展示了缓存的配置与应用,帮助开发者构建更高效的Web应用。
64 0
|
4月前
|
Python
技术经验解读:【Python】torrentParser1.04增加获得磁力链URI功能
技术经验解读:【Python】torrentParser1.04增加获得磁力链URI功能
23 0
|
5月前
|
算法 网络安全 Python
sqlmap性能优化_sqlmap 优化 不接受请求体,阿里巴巴网络安全面试题答案
sqlmap性能优化_sqlmap 优化 不接受请求体,阿里巴巴网络安全面试题答案
|
5月前
|
前端开发
R语言实现随机前沿分析SFA、数据包络分析DEA、自由处置包分析FDH和BOOTSTRAP方法
R语言实现随机前沿分析SFA、数据包络分析DEA、自由处置包分析FDH和BOOTSTRAP方法
|
XML 数据格式 Python
python---------xpath提取数据------打破局限
python---------xpath提取数据------打破局限
|
5月前
|
SQL 数据可视化 API
数据工程实践:从网络抓取到API调用,解析共享单车所需要的数据
在本篇文章中,将解释网络抓取和APIs如何协同工作,从百科上抓取城市数据,利用APIs获取天气数据,从而推断出与共享单车相关的信息。
50 0
数据工程实践:从网络抓取到API调用,解析共享单车所需要的数据
|
11月前
|
Prometheus 监控 Kubernetes
站点可靠性工程 SRE 最佳实践 -- 黄金监控信号
站点可靠性工程 SRE 最佳实践 -- 黄金监控信号
197 0
|
前端开发 NoSQL Redis
28个案例问题分析---012---发送调查问卷逻辑优化--代码优化
28个案例问题分析---012---发送调查问卷逻辑优化--代码优化
61 0
|
监控
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit3-Form3用户负载类型查询界面
【乌拉喵.教程】“多负载识别监控平台(上位机)”技术细节 之Unit3-Form3用户负载类型查询界面