Python爬虫登录后token处理

今天继续给大家介绍Python爬虫相关知识,本文主要内容是Python爬虫登录后token处理。

一、网页token及token作用

在上文Python爬虫登录后cookie处理中,我们介绍过使用使用Python爬虫解决cookie及网页登录访问问题。
然而,有的网站,例如DVWA,为了防止CSRF等攻击(CSRF漏洞是常见的安全漏洞之一,关于CSRF可以参考文章:CSRF漏洞简介),会设置token字段。
我们可以使用浏览器开发者工具检查登录页面HTML源代码如下所示:
在这里插入图片描述
从上图中可以看出,在页面中有一个隐藏的input标签,因为该标签属性设置位了hidden,因此该标签不会显示在浏览器中,不会影响页面整体效果。但是该input标签是存在name和value的,因此当我们点击浏览器中的Login按钮时,该input标签中的name和value也会被当作POST提交数据的一部分进行提交。最麻烦的是,该字段的值会随着我们对页面的刷新而变化,这意味着我们无法从浏览器复制该值后粘贴到Python代码中!

二、Python爬虫token问题解决

为了解决这一问题,我们就必须先访问站点的登录页面,获取token值,在获取token值之后,将其作为登录数据包的POST提交数据的一部分,与用户名和密码一起提交。这样就解决了token的验证问题。
针对DVWA网站,我们实现的简单登录后爬取主页数据Python爬虫代码如下所示:

import requests
from lxml import etree

url1="http://192.168.136.1/dvwa/login.php"
url2="http://192.168.136.1/dvwa/index.php"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"}

session=requests.session()
response1=session.get(url=url1,headers=headers)
page_text1=response1.text
tree=etree.HTML(page_text1)
token=tree.xpath('//*[@id="content"]/form/input/@value')[0]
print(token)
data={
    "username":"admin",
    "password":"password",
    "Login":"login",
    "user_token":token
}
response2=session.post(url=url1,headers=headers,data=data)
response3=session.get(url=url2,headers=headers)
page_text=response3.text
fp=open("./dvwa.html",'w')
fp.write(page_text)
fp.close()

在上述代码中,我们一共发起了3次session请求,第一次请求是为了获取token,第二次请求是为了成功登录,并获取登录后的cookie,第三次请求是为了拿到登录后的主页数据。上述代码执行后,我们成功下载到了登录后的源码数据,结果如下所示:
在这里插入图片描述
从上图可以看出,我们使用Python爬虫处理token成功!
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远是少年啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值