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

相关文章
|
Python
请求方式之二----requests模块
请求方式之二----requests模块
87 0
|
SQL 数据库 监控
Expert 诊断优化系列------------------透过等待看系统
上一篇我们简单的介绍了,语句优化的三板斧,大部分语句三板斧过后,就算不成为法拉利也能是个宝马了。为了方便阅读给出系列文章的导读链接: SQL SERVER全面优化-------Expert for SQL Server 诊断系列     本篇主要讲述几个常见的系统等待,透过这些等待,看看系统存在什么问题,怎么样解决这些问题。
1150 0
|
监控 Java 测试技术
第八章--性能优化--pprof详细研究
pprof的基本操作, 上次博客有记录, 这里进一步研究pprof 接下来开始今天的学习内容. 计划今天研究以下几个部分的内容
372 0
第八章--性能优化--pprof详细研究
|
缓存 前端开发 rax
测试cache访问延迟背后的计算机原理
CPU的cache往往是分多级的金字塔模型,如何在多级cache中测试cache的延迟?
1368 1
测试cache访问延迟背后的计算机原理
|
vr&ar 数据库 数据安全/隐私保护
28个案例问题分析---25---用户、第三方、AR系统的耦合性--模块耦合
28个案例问题分析---25---用户、第三方、AR系统的耦合性--模块耦合
124 0
|
人工智能 物联网 关系型数据库
|
前端开发 NoSQL Redis
28个案例问题分析---012---发送调查问卷逻辑优化--代码优化
28个案例问题分析---012---发送调查问卷逻辑优化--代码优化
91 0
|
XML 数据格式 Python
python---------xpath提取数据------打破局限
python---------xpath提取数据------打破局限
118 0
|
Go
Go实战抢红包系统(四) - 基础实施层coding(下)
Go实战抢红包系统(四) - 基础实施层coding(下)
102 0
Go实战抢红包系统(四) - 基础实施层coding(下)