将利用cookie实现登陆知网、抽屉网 和 基于session自动登录抽屉网 写在一起,主要是这样更利于比较session和cookie二者的差别
利用cookie实现登陆知网与抽屉网
Cookie:小蛋糕,饼干
特点
1. 用于存储用户的某些信息(不包含隐私信息)
2. 只用于存储少量数据
3. cookie是个文件,位于浏览器
4. cookie有生命周期,一旦网页退出,cookie就失效了
1. 如果网站登录的时候需要写验证码,可以考虑通过cookie直接登录
例如:知乎网
注意:cookie需要手动登录以后再粘贴,粘贴的是登录进去之后的cookie
例子:模拟cookie登录知乎
打开1.html文件可自动实现登录,但前提是必须手动登录进去知乎网站基于session自动登录抽屉网
import requestsurl=""response=requests.get(url)# print(response.cookies)#利用cookie模拟登陆知乎# 利用cookie模拟登录知乎url=""response=requests.get(url,headers={"User-Agent":"""Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/0101 Firefox/53.0""","Cookie":"""q_c1=9dc2d4b654714d768acde5be0cff9744|1517306017000|1517306017000; _zap=c2979b69-2322-4e05-9fb4-764c1fa2fdf0; aliyungf_tc=AQAAAKS0i1yPJQoALROfdSgGTSGtXL2A; d_c0="AEAtHb-8NQ2PTrKjUrihvjX4w1Sjk0uKPL4=|1519724547"; _xsrf=bc4453d9-3193-4a94-9e32-18c74975063c; capsion_ticket="2|1:0|10:1519724585|14:capsion_ticket|44:MDU4MDExNmE3MDczNGQ3MDk3OWJiMjNmYmEyYjQ1YzE=|ee15c3010fa505d413ed4ca6426e61725d212f7981e9c0c87f550a41c1af4e95"; z_c0="2|1:0|10:1519724661|4:z_c0|92:Mi4xX1hBRkNBQUFBQUFBUUMwZHY3dzFEU1lBQUFCZ0FsVk5kWGFDV3dCbjlUVDRhUUFzaExtUnBZNFotcFVBbFVFTkd3|e58fc834c5c512c74debbcef01ea67024f28d7555bc85dfb02228c8d4444941e"""})with open("1.html",'wb') as f:f.write(response.content)print(response.content)print(response.content)
2. 如果网站登录的时候不需要验证码,可以考虑通过代码自动登录
例如:抽屉网
注意:它的cookie是通过代码自动获取的
例子:模拟cookie登录抽屉网
抽屉网的登录逻辑(其它网站不适用)
1. 先获取在首页服务器自动返回的cookie,因为它是用户的凭证
2. 开始登录(要携带上第一步的cookie)
3. 开始点赞/评论......
import requests#从fake_useragent引入UserAgent类,只要用于获取User-Agent,省去每次去浏览器找的工作from fake_useragent import UserAgent#创建对象agent = UserAgent()
# 不要重复造轮子#在命令框中找是否有某个工具包的方法# pip search 工具包名字#例如: pip install fake_useragent
获取在首页服务器自动返回的cookie
url = "/"# 通过浏览器获取的操作一般都是get请求response = requests.get(url,headers={# "User-Agent": RandomAgent.rand()"User-Agent": agent.random})#将cookies转换为字典形式cookies = response.cookies.get_dict()
开始登录(要携带上第一步的cookie)
#开始登录(要携带上第一步的cookie)#在打开到查看元素的网络,清除所有信息,然后点登陆按钮,点开第一个post请求,然后将右边的请求网址复制过来当做url url = "/login"response = requests.post(url,#在参数里可查看到data={"phone": "8615896901897","password": "qweqweqwe1","oneMonth": "1",},headers={"User-Agent": agent.random,},cookies=cookies,)
开始点赞/评论......
#同上述方法获得url url = "/link/vote?linksId=17717073"response = requests.post(url,headers={"User-Agent": agent.random,},cookies=cookies,)print(response.text)
抽屉网登录时:
1. 第一次访问首页的时候 服务器 返回一个cookie
2. 携带1的cookie进行登录,服务器 返回另一个cookie,所以在登录与开始点赞/评论过程中,只能用第一次访问首页时返回的cookie,不能用之后的cookie
基于session自动登录抽屉网
import requestsfrom fake_useragent import UserAgentagent = UserAgent()
如果通过session发请求,会自动携带cookie
session = requests.session()
获取首页
s1 = session.get("/", headers={"User-Agent": agent.random})
模拟登录
s2 = session.post("/login", data={"phone": "8615896901897","password": "qweqweqwe1","oneMonth": "1",}, headers={"User-Agent": agent.random})
开始点赞/评论
s3 = session.post("/link/vote?linksId=17717071",headers={"User-Agent": agent.random})
print(s3.text)
cookie和session的区别:
cookie和session是共存亡的关系
如果一个网站禁用了cookie,但是还可以保留登录状态,一般会在参数中携带一个sessionId参数,用来跟踪回话,保留状态