第二天:
Requests深入
GET和POST请求的区别:
GET请求的参数是附加到URL的后面(?kw=赵丽颖&pn=0)
POST请求的参数是附加到请求体中的
GET请求常用在超链接(<a href=”xxx”>)
POST请求常用在表单中(form标签)
发送post请求
哪些地方我们会用到post请求:
所以同样的,我们的爬虫也需要在这两个地方模拟浏览器发送post请求
用法:
response=requests.post("https://www.baidu.com/",data=data,headers=headers)
data 的形式:字典
使用代理
浏览器 è 代理 è 服务器
为什么我们要使用代理?
proxies的形式:字典
proxies = {
}
代理网站:快代理,代理云,西刺免费代理IP
cookie和session区别:
爬虫处理cookie和session
带上cookie、session的好处:
能够请求到登录之后的页面
带上cookie、session的弊端:
一套cookie和session往往和一个用户对应
请求太快,请求次数太多,容易被服务器识别为爬虫
不需要cookie的时候尽量不去使用cookie
但是为了获取登录之后的页面,我们必须发送带有cookies的请求
处理cookies 、session请求
requests 提供了一个叫做session类,来实现客户端和服务端的会话保持
使用方法:
session = requests.session()
response = session.get(url,headers)
使用requests提供的session类来请求登录之后的网站的思路:
1.首先实例化一个session对象。
2.然后使用session发送请求,登录对应的网站,把cookie保存在session对象中。
3.再使用session对象请求登录之后才能访问的网站,session能够自动的携带登录成功时保存在其中的cookie,进行请求。
获取登陆后的页面的三种方式:
import requests
# 实例化一个session对象
session =
requests.session()
url = "http://www.renren.com/PLogin.do/"
data = {"email":"**********", "password":"***********"}
headers = {
"User-Agent": "Mozilla/5.0
(Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/70.0.3538.110 Safari/537.36"
}
# 使用session发送post请求,cookie保存在其中
session.post(url, data=data, headers=headers)
r = session.get("http://www.renren.com/970724654/profile", headers=headers)
#保存
with open(‘renren1.html‘, ‘w‘, encoding=‘utf-8‘) as f:
f.write(r.content.decode())
import requests
headers = {
"User-Agent": "Mozilla/5.0
(Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/70.0.3538.110 Safari/537.36",
"Cookie": "anonymid=jvdydlcgy97su0;
depovince=GW; _r01_=1; _de=010A33CAECAC9FB3E34F9DF2409E43F1;
ln_uact=17608484920; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif;
jebe_key=7a3b8afb-6889-452f-87b2-c31f7c098132%7Ca0ba31c1833dc38cbaebc26d12250140%7C1557243378971%7C1%7C1557243378746;
jebecookies=fadd08d5-408a-4073-b657-07cad1ab5e43|||||;
JSESSIONID=abcOmuoEeKCy3gL1hKxQw;
ick_login=2c985b25-87cb-4d5c-9b37-0a54cdfc256e;
p=80809be57d49622ca56e2ab6a546440d4; first_login_flag=1;
t=8db3ba858dd6405899a4570a80aacd524;
societyguester=8db3ba858dd6405899a4570a80aacd524; id=970724654; xnsid=686f6ca3;
ver=7.0; loginfrom=null; wp_fold=0"
}
r = requests.get("http://www.renren.com/970724654/profile", headers=headers)
#保存
with open(‘renren2.html‘, ‘w‘, encoding=‘utf-8‘) as f:
f.write(r.content.decode())
Requests小技巧
处理HTTPS请求SSL证书验证
Requests也可以为HTTPS请求验证SSL证书:
import requests
response = requests.get("https://www.baidu.com/", verify=True)
# 也可以省略不写
# response = requests.get("https://www.baidu.com/")
print (response.text)
如果我们想跳过证书验证,把 verify 设置为 False 就可以正常请求了。
原文:https://www.cnblogs.com/sujiu/p/11552295.html