requests模块的简单使用
使用IP池的方法
requests模拟登录的三种方式
cookie和session的区别
cookie和session的优缺点
解决办法
准备很多账号和密码,那么就有很多cookie。携带一堆cookie进行请求,把cookie组成cookie池。
三种方式:
- 实例化session,使用session发送post请求,在使用它获取登录后的页面(账号密码方式)
- 在header中添加cookie键,值为cookie字符串
- 在请求方法中添加cookie参数,接收字典形式的cookie
模拟登录1
import requests
session = requests.session()
post_url = "http://www.renren.com/PLogin.do"
post_data = {"email":"mr_mao_hacker@163.com", "password":"alarmchime"}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36"
}
# 使用session发送post请求,cookie保存在其中
session.post(post_url, data=post_data, headers=headers)
# 在使用session进行请求登录之后才能访问的地址
r = session.get("http://www.renren.com/327550029/profile", headers=headers)
# 保存页面
with open("renren1.html","w",encoding="utf-8") as f:
f.write(r.content.decode())
模拟登录2
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36",
"Cookie": "anonymid=kfaq9b1a-24dvxc; depovince=GUZ; _r01_=1; JSESSIONID=abczTQNg3VWlc_EiLoQsx; ick_login=696b9fd3-1078-441f-84b7-6719e64a2552; taihe_bi_sdk_uid=c390ad48b9bcdd599c0730e4c26c80c1; taihe_bi_sdk_session=048486a89c730d6954978ff3ae6299d1; _de=BF09EE3A28DED52E6B65F6A4705D973F1383380866D39FF5; t=1d6256f59cf5bcf00fc94ba4e05f69ae4; societyguester=1d6256f59cf5bcf00fc94ba4e05f69ae4; id=975149554; xnsid=55c297ac; jebecookies=98a53108-d6e5-4430-9566-310405448e8f|||||; ver=7.0; loginfrom=null; wp_fold=0"
}
# 在使用session进行请求登录之后才能访问的地址
r = requests.get("http://www.renren.com/327550029/profile", headers=headers)
# 保存页面
with open("renren2.html","w",encoding="utf-8") as f:
f.write(r.content.decode())
直接使用cookie访问登录后的页面,使用场景:
- cookie过期时间很长的网站
- 在cookie过期之前能够拿到所有的数据,比较麻烦
- 配合其他程序一起使用,其他程序专门获取cookie,当前程序专门请求页面
模拟登录3
import requests
# 在使用session进行请求登录之后才能访问的地址
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36",
}
cookies = "anonymid=kfaq9b1a-24dvxc; depovince=GUZ; _r01_=1; JSESSIONID=abczTQNg3VWlc_EiLoQsx; ick_login=696b9fd3-1078-441f-84b7-6719e64a2552; taihe_bi_sdk_uid=c390ad48b9bcdd599c0730e4c26c80c1; taihe_bi_sdk_session=048486a89c730d6954978ff3ae6299d1; _de=BF09EE3A28DED52E6B65F6A4705D973F1383380866D39FF5; t=1d6256f59cf5bcf00fc94ba4e05f69ae4; societyguester=1d6256f59cf5bcf00fc94ba4e05f69ae4; id=975149554; xnsid=55c297ac; jebecookies=98a53108-d6e5-4430-9566-310405448e8f|||||; ver=7.0; loginfrom=null; wp_fold=0"
cookies = {i.split("=")[0]:i.split("=")[1] for i in cookies.split("; ")}
r = requests.get("http://www.renren.com/327550029/profile", headers=headers, Cookies=cookies)
# 保存页面
with open("renren2.html","w",encoding="utf-8") as f:
f.write(r.content.decode())