开始了
requests模块简单介绍
1.requests模块作为爬⾍中最常⽤的⼀个模块,一个让爬虫小白能快速接受的模块,
可能之前看过⼀些教程的⼩可爱在想,为什么不是从urllib开始,⽽是从
requests模块开始,原因有以下⼏点
● 1.requests的底层实现就是urllib
● 2.requests在Python2和Python3通⽤,⽅法完全⼀样
● 3.requests简单易⽤
简单了解一下我们访问网页的情况
我们是通过发送请求给服务器,然后服务器响应返回数据,而requetst就是模拟浏览器发送请求,
简单理解为:发送⽹络请求,返回相应数据
下面开始使用requests前我把我的思路以画图的形式表达出来:
下面我们要干事情,要先知道怎么干,第一步:
下载模块requests:
发送简单的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)
encoding是为了设计返回数据编码格式和接受的数据编码格式相一致
text是获取服务器返回数据html 类型为字符串
获取数据的还有content json()
返回响应状态码
返回部分请求头
返回全部请求头
content 获取数据(返回字节数据)
content.decode() 等同于 text 返回类型为字符串
把字节转换为字符串
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)
这里用到了post(),这个和get()的大致用法相同 唯一不同的就是data参数
返回响应对应的 请求头
response.request.headers
返回全部响应头
headers
发送带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里面一起发送过去
代码如下:
有些小可爱可能觉得写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不行时会报错:
在请求的时候,代理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模块可以模拟浏览器访问网页,但是如果针对一些动态网页就不行了,以上是我的个人分享情况,