Python爬虫登录后token处理

news2024/10/6 10:51:15

今天继续给大家介绍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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文读懂Linux内核进程及调度时机原理

前言0.1 进程概要进程是对物理世界的建模抽象,每个进程对应一个 task_struct 数据结构,这个数据结构包含了进程的所有的信息。在 Linux 内核中,不会区分线程和进程的概念,线程也是通过进程来实现的,线程和进程的唯一区…

Leetcode:257. 二叉树的所有路径(C++)

目录 问题描述: 实现代码与解析: 递归: 原理思路: 迭代(前序): 思路原理: 问题描述: 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有…

计算机网络第一章

目录 1.概念 2.标准化工作及其相关组织 3.速率相关的性能指标 4.分层的基本原则: 5.参考模型 1.OSI七层参考模型 2.TCP/IP参考模型 3.五层参考模型 1.概念 计算机网络是网络中的一个分支,组成包括了计算机系统,通信设备,线路…

app逆向 || xx合伙人登陆参数

声明 本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负! 如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦! 本文适用于对安卓开发和Java有了解的同学 前言 本人最近一直在…

学习笔记5:关于操作符与表达式的求值

目录​​​​​​​ 一.移位操作符 1.左移操作符 2.右移操作符 二.位操作符 1.位运算基本知识 2.位运算的巧妙运用 三.其他操作符 1.算术操作符 2.单目操作符 3.关于逻辑操作符 四.表达式求值 隐式类型转换 (1)整形提升(短整型家族数据的二进制序列补位转换) (2).算…

【最新】SpringBoot集成Dubbo3

最近在学习dubbo,构建一个简单的springboot集成dubbo,中间也是出了好多问题,在这记录下整体的过程。 1. 构建SpringBoot环境 一个简单的聚合工程 dubbo-consumer:是服务消费方dubbo-provider:是服务提供方dubbo-inte…

机器学习笔记之前馈神经网络(二)非线性问题

机器学习笔记之前馈神经网络——非线性问题引言回顾:关于非线性问题解决非线性问题的三种方式引言 上一节介绍了从机器学习到深度学习的过渡,并介绍了深度学习的发展过程。本节将主要介绍如何使用神经网络处理非线性问题 回顾:关于非线性问…

决策树生成、决策树可视化、决策树算法api、泰坦尼克号乘客生存预测案例代码

一、决策树算法api class sklearn.tree.DecisionTreeClassifier(criterion’gini’,max_depthNone,random_stateNone) criterion:特征选择标准,"gini"或者"entropy",前者代表基尼系数,后者代表信息增益&…

来自 GitHub 2022 的趋势和见解

《Github 2022 发展趋势和见解》发布了这件事小伙伴们知道了吧?这是每个程序员不能错过的年度报告,因为里面详细介绍了语言的发展趋势和热门领域的介绍。那就让我们来看看吧 目录 编程语言 地理分布 贡献时间分配 技术发展趋势 最受欢迎的存储库 …

GoogLeNet详解

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 ✨完整代码在我的github上,有需要的朋友可以康康✨ https://github.com/tt-s-t/Deep-Learning.git 目录 一、GoogLeNet…

C++入门——auto、范围for、nullptr

下一篇就要类和对象了,剩了点零碎的知识点就浅浅水一篇把 一. auto关键字 在早期C/C中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的 是一直没有人去使用它,这是由于变量本身就具备生命周期…

算法及时间、空间复杂度

算法 算法是对问题求解过程的一种描述,是为解决一个或一类问题给出的一个确定的、有限长的操作序列。严格说来,一个算法必须满足以下5个重要特性: (1)有穷性:对于任意一组合法的输入值,在执行有…

【数据结构与算法——C语言版】5. 排序算法(2)——冒泡排序

前言 上篇文章【数据结构与算法——C语言版】4. 排序算法(1)——选择排序我们介绍了排序算法中的选择排序,其时间复杂度是O(n2),本篇文章我们将介绍另一种同样时间复杂度是O(n2)的排序算法——冒牌排序,这两种算法思路…

ChatGPT背后的开源AI框架Ray,现在值10亿美元

Ray 被 OpenAI、亚马逊等科技公司用来开发大模型,是最近异军突起的框架。 最近一段时间,文本生成的人工智能在互联网上掀起了一阵风暴:ChatGPT 因为可以对人们能想到的几乎任何问题提供非常详细、近乎逼真的回答而受到追捧。大模型应用的出现…

Mapper代理开发案例及MyBatis核心

本片文章需要参考我的前一篇文章:MyBatis入门案例引入总结,使用mapper代理开发的好处就是可以解决开发中硬编码的问题和简化后期的SQL执行。使用这种方式可以不用写接口的实现类,免除了复杂的方法,使得代码更加清晰易懂按照以前的…

vue的过渡动画(有vue的动画库和ui库的介绍)

一、概念 Vue 在插入、更新或者移除 DOM 时&#xff0c;提供多种不同方式的应用过渡效果。 二、默认过渡 <template><div><button click"isShow!isShow">显示/隐藏</button><transition appear><h1 v-show"isShow" cl…

过滤器和拦截器的使用及管理

参考&#xff1a;(70条消息) Spring过滤器和拦截器的区别_yjc0403的博客-CSDN博客https://www.cnblogs.com/colin220/p/9606412.htm概述过滤器&#xff1a;是在javaweb中&#xff0c;你传入的request、response提前过滤掉一些信息&#xff0c;或者提前设置一些参数&#xff0c;…

Anaconda安装之后Spyder打不开解决办法--目前有用 jupyter notebook 无法正常运行2023.1.7

纯纯小白&#xff0c;探索一天&#xff0c;终于成功&#xff0c;需要我的经历没有白费&#xff0c;让大家少走弯路。 问题描述 从官网下载Anaconda之后&#xff0c;安装&#xff0c;一切正常。打开Anaconda navigator在弹出窗口选择了更新&#xff08;我怀疑这就根源&#xf…

Js逆向教程24-作用域和自执行函数

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; Js逆向教程24-作用域和自执行函数 一、变量作用域 1.1局部变量 function jb() {var a"我是局部变量"return a; }1.2全局变…

【Java寒假打卡】Java基础-异常

【Java寒假打卡】Java基础-异常异常概述throws声明异常throw抛出异常try-catch 抛出异常throwable的成员方法异常概述 Exception:称之为异常类&#xff0c;他表示程序本身可以处理的问题 RuntimeException及其子类&#xff1a;运行时异常。&#xff08;空指针异常&#xff0c;…