resquests模块
常见的响应对象和方法
response.url:响应的URL,有时候响应的URL和请求的URL不一样。
response.status_code:响应状态码
response.requests.headers:响应对应的请求头
response.headers:响应头
response.requests.cookies:响应对应的请求的cookie;返回cookie的类型
response.cookies:响应的cookie
response.json():自动将json字符串类型的响应内容替换成Python对象
发送请求:
一. 发送带header 头的请求
requests.get(url,header=headers)
header参数接受字典形式 的请求头
请求头字段名作为key ,字段对应的值为value
import requests
url = 'http://www.baidu.com'
response = requests.get(url)
print(len(response.content.decode()))
print(response.content.decode())
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
}
response1 = requests.get(url, headers=headers)
print(len(response1.content.decode()))
print(response1.content.deco
发送带参数的请求:
一:url直接带参数
import requests
url = 'http://www.baidu.com/s?wd=python'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
}
response = requests.get(url, headers=headers )
with open('baidu.html','wb') as f:
f.write(response.content)
直接在url上写参数
二:使用params参数
- 构建参数字典
- 发送请求时设置参数字典
import requests
url = 'http://www.baidu.com/s?'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
}
data = {
'wd':'python'
}
response = requests.get(url, headers=headers, params=data)
print(response.url)
with open('baidu1.html','wb') as f:
f.write(response.content)
在headers参数中携带cookie
可以保持网站的登录状态
- 从浏览器中复制User-Agent和cookie
- 浏览器中的请求头字段和值与header参数中必须一致
- header请求参数字典中的cookie键对应的值是字符串
#coding utf-8
import requests
url = 'https://github.com/exile-mirganna'
#构造请求头
headers= {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
'cookies':'...............xxxxx.x..x..x.x..x'
}
response = requests.get(url,headers=headers)
with open ("github.html","wb") as f:
f.write(response.content)
cookies参数的使用:
在上面我们在headers参数中携带cookie,也可以使用专门的cookie参数
1.cookie参数的形式:字典
cookies={"cookie的name":"cookie的value"}
- 该字典对应请求头中cookie字符串,以分号,空格分割每一对字典键值对
- 等号左右的是一个cookie的name,对应cookie字典的key
- 等号右边对应 的cookie字典的value
2.cookies参数的使用方法
response = requests.get(url,cookies)
3.将cookie字符串转换为cookie参数所需的字典:
4.cookieJar对象转换为cookie字典的方法
使用requests获取的response对象,具有cookie属性,该属性值是一个cookieJar类型,包含了对方服务器设置在本地的cookie。我们如何将其转换成cookie字典呢?
- 转换方法:cookie_dict = requests.utils.dict_from_cookiejar(response.cookie)
- 其中response.cookies返回的就是cookieJar类型的对象
- requests.utils.dict_from_cookiejar 函数返回cookies字典
import requests
url ='http://www.baidu.com'
response = requests.get(url)
print(response.cookies)
dict_cookies = requests.utils.dict_from_cookiejar(response.cookies)
print(dict_cookies)
jar_cookies = requests.utils.cookiejar_from_dict(dict_cookies)
print(jar_cookies)
5.超时参数timeout的使用
import requests
url = 'http://twitter.com'
response = requests.get(url,timeout =3)
6.代理设置
import requests
url ='http://baidu.com'
proxies ={
'http':'http://106.14.5.129:9000'
}
#里面的代理Ip可以在网上找
response =requests.get(url,proxies=proxies)
使用verify参数忽略CA证书
在浏览器上网的时候,有时候能够看到以下提示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBBgtSJc-1620807011105)(C:\Users\Simple\AppData\Roaming\Typora\typora-user-images\image-20210512140112131.png)]
原因:该网站的CA证书没有经过(受信任的根证书颁发机构)的认证
爬虫在爬这样的网站时是会报错的
import requests
url='http://sam.huat.edu.cn:8443/selfservice/'
response = requests.get(url , verify=False)#关掉
print(response.content)
post请求练习
1.基本介绍
requests.post(url,data)
要多一个data字典
import requests
url= 'http://dict.youdao.com/w/%E9%87%91%E5%B1%B1%E5%BF%AB%E8%AF%91%E5%9C%A8%E7%BA%BF%E7%BF%BB%E8%AF%91/'
data={
'a':'=2',
'b':'=3'
}
requests.post(url,data)
2.post请求数据来源
- 固定值 抓包比较不变的
- 输入值 抓包会变化的值
- 预设值–静态文件 : 需要提前从静态HTML中获取
- 预设值–发请求 需要对指定地址发请求获取数据
- 在客户端生成的 分析JS,模拟生成数据
requests.session进行状态保持
requests模块中的session类能够自动处理发送请求响应过程中产生的cookie,进而达到状态保持的目的。
1.requests.session的作用以及运用场景
- requests.session的作用
自动处理cookie,即下一次请求会带上上一次的cookie
- requests.session的运用场景
自动处理连续的多次请求过程中产生的cookie
2.requests.session的使用方法
session实例在请求了一个网站后,对方服务器设置在本地的cookie会保存在session中,下一次再使用session请求对方服务器时,就会带上上一次的cookie
import requests
session = requests.session() #实例化session对象
response = session.get(url,headers,...)
response = session.post(url,data)