复制url直接能跳过验证_python 爬虫如何突破登录验证

我用 python 做爬虫爬过不少数据,比如在 google play 爬应用信息;在 instragram, 500px 爬图片;当然爬虫的作用不止于此,比如定时去某个网站签到,妈妈再也不用担心我忘记签到了

这些网站支持游客访问,但要访问特定内容,比如你收藏的图片,或者要签到,那前提是要登录。

现在的网站登录验证是越来越复杂了,且不说那些真人都挠头的验证码,就算是不需要验证码的网站,也各出奇招,像 gitee 是通过前端加密登录信息,而 instagram 则是通过 url 里的 query_hash 以及 header 里的 X-CSRFToken,X-Instagram-GIS 来做校验,对爬虫很不友好,都不是那么容易登录进去的

直接发送账号密码到登录接口

有些淳朴的网站,其登录校验只要提供帐号密码就行,通过浏览器抓包看下数据格式,然后照样发起请求,就可以了

比如 500px,其登录验证几乎没有难度,代码如下

# -*- coding: utf-8 -*-

import requests
import json

from profile import email, password

session = requests.session()

if __name__ == '__main__':

url = 'https://api.500px.com/v1/session'
data = {
'session':
{
'email': email,
'password': password
}
}
headers = {'Content-Type': 'application/json'}

result = session.post(url, data=json.dumps(data), headers=headers)
print(result.text)

登录成功后,网站会向客户端写入 cookie,后续访问就一路畅通了,在 python 里则意味着我们需要用 session 发起后续请求

复杂的登录校验

这次以 gitee 为例,来研究下如何登录,先用浏览器抓包看下 gitee 的登录

23de020cb27f10947b34f463602f5379.png

gitee 登录地址

aa4547cf3213fae56cba0feebe4f66cf.png

gitee 登录数据

可以看到要登录 gitee,请求参数里有 authenticity_token 和 加密后的 password

这个 token 怎么来的?根据经验判断应该是藏在 gitee 登录页某处,感觉不难获取;关键是这个 password 的加密,应该是某个 js 脚本的功劳,不过要逆向出 js 是如何加密的,的确是非常困难的。。。毕竟我们不是 js 执行引擎

如果无法逆向出这个加密算法,要怎么登录呢?可以先用浏览器登录,再把 cookie 复制出来给爬虫使用

首先是复制 cookie,浏览器登录 gitee 成功后,随意抓个包就可以得到 cookie 了

d3629b18ec128b902be6b9ef2940dd6f.png

gitee cookie

复制下来的 cookie 设置到爬虫里,代码如下

# -*- coding: utf-8 -*-

import requests

session = requests.session()

if __name__ == '__main__':

headers = {
'Host': 'gitee.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
'Accept': 'application/json',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
}

url = 'https://gitee.com/api/v3/internal/my_resources'
result = session.get(url=url, headers=headers)

if result.status_code == 200:
print('success: \n%s' % (result.text))
else:
print(result.status_code)

headers['Cookie'] = '......'
result = session.get(url=url, headers=headers)

if result.status_code == 200:
print('success: \n%s' % (result.text))
else:
print(result.status_code)

执行结果如下

// 未设置 cookie 返回 401
401

// 设置 cookie 后返回数据
success:
{"enterprises_count":0...}

可见,使用浏览器的 cookie 就可以达到爬虫免登录的效果了

程序自动获取 cookie

浏览器抓包再复制 cookie 到爬虫代码,感觉有点 low,实际上 cookie 是保存在我们电脑上的,这样浏览器才能做到记住登录状态功能

那么可以让爬虫自己读取浏览器 cookie,从而避免我们抓包再复制吗?答案是肯定的,考虑到文章篇幅,我将在下一篇文章里介绍如何用代码读取浏览器已存储 cookie 来进行登录,敬请期待

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

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

相关文章

[2-sat]HDOJ3062 Party

中文题 题意略 学2-sat啦啦啦 2-sat就是 矛盾的 ($x、x’$不能同时取) m对人 相互也有限制条件 取出其中n个人 也有可能是把一件东西分成 取/不取 相矛盾的两种情况 (那就要拆点啦~) 取其中n件 做法是 暴力 和 强连通 两种 重点在于建图: 对于x,记 取…

node作为java中间间_node作为中间服务层如何发送请求(发送请求的实现方法详解)...

GET请求:var http require(http);var qs require(querystring);var data {a: 123,time: new Date().getTime()};//这是需要提交的数据var content qs.stringify(data);var options {hostname: 127.0.0.1,port: 10086,path: /pay/pay_callback? content,metho…

python目标识别代码_利用ImageAI库只需几行python代码超简实现目标检测

什么是目标检测目标检测关注图像中特定的物体目标,需要同时解决解决定位(localization) 识别(Recognition)。相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置…

Winodws live writer

发布一篇试试。 转载于:https://www.cnblogs.com/DotNetCSharp/p/4742956.html

java里面value_「Java基础知识」Java中包含哪些运算符

原标题:「Java基础知识」Java中包含哪些运算符在Java中包含的运算符有:算数运算符,逻辑运算符,关系运算符等。算数运算符也就是我们平时的加减乘除余等操作:在Java中都是将右边的值赋值给左边,所以一般格式…

三元组法矩阵加法java_计算机视觉学习笔记(2.1)-KNN算法中距离矩阵的计算

本笔记系列以斯坦福大学CS231N课程为大纲,海豚浏览器每周组织一次授课和习题答疑。具体时间地点请见微信公众号黑斑马团队(zero_zebra)和QQ群(142961883)发布。同时课程通过腾讯课堂(百纳公开课)进行视频直播.欢迎参与…

[转]Java常用概念解答

1. 事务是什么? 事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、 一致性、隔离性和持久性)属性,只有这样才能成为一个事务: 原子性 事务必须是原子…

idea maven创建java项目_新版本IntelliJ IDEA 构建maven,并用Maven创建一个web项目(图文教程)...

之前都没试过用maven来管理过项目,但是手动找包导包确实不方便,于是今天用2016版的IDEA进行了maven的初尝试。打开IDEA,创建新项目:然后选择Maven,以及选择自己电脑的jdk:接下来自定义GroupId以及ArtifactI…

Linux 格式化磁盘命令mkfs

linux格式化磁盘命令mkfs指令:mkfs使用权限 : 超级使用者使用方式 : mkfs [-V] [-t fstype] [fs-options] filesys [blocks] [-L Lable]说明 : 建立 linux 档案系统在特定的 partition 上参数 :device : 预备检查的硬盘 partition…

servlet 返回可访问文件_JavaWeb技术(4):Servlet的理解(上)

我们在开发中无时无刻都在与Servlet进行接触,只是因为框架的封装性,我们很少直接地去操作servlet,但再怎么封装,基本的思路都不会变化,变得只是实现的方式,Servlet是什么:网上的回答基本是Servl…

java ldap 分页_具有从属引用的 LDAP 分页查询未正确处理

具有从属引用的 LDAP 分页查询未正确处理09/14/2020本文内容本文提供了一些方法来避免使用从属引用的 LDAP 分页查询未正确处理的问题。原始产品版本: Windows 8原始 KB 编号: 2561166症状你有一个应用程序,使用 ldap_search_ext 或 ldap…

js分家效应

(原创文章,转载请注明出处) 有继承,那么就有分家。让我们看以下例子。 var parents function(){}parents.prototype.money 200;var children function(){}children.prototype new parents();var parent new parents();var ch…

如何设置打印的时候不加上页面链接_excel表格的这10个打印小技巧,办公室财务人员记得收藏...

打印工作表是日常工作中最常见的一个工作,也是Excel在工作中最常用的一个地方,如何做到快速准确地打印文件呢。今天文理会计小编给大家从网上整理了几个打印文件的小技巧。1、打印标题打印的工作表的数据有好多页的时候,为了查看方便&#xf…

java sql objects_第十五章-简书.sql

-- ## 练习1-- 1. 创建一个视图,通过该视图可以查询到工资在2000-5000内并且姓名中包含有A的员工编号,姓名,工资。create or replace view viewSal2k_5kas select empno,ename,sal from empwhere sal between 2000 and 5000and ename like %A…

rabbitmq 拉取消息太慢_面试官:消息队列这些我都要问

作者:mousycodersegmentfault.com/a/1190000021054802消息队列连环炮项目里怎么样使用 MQ 的?为什么要使用消息队列?消息队列有什么优点和缺点?kafka,activemq,rabbitmq,rocketmq 都有什么去呗?如何保证消息队列高可用…

java 星期顺序_第8周 【项目3-顺序串算法】

/**Copyright (c)2017,烟台大学计算机与控制工程学院*All rights reservrd.*作者:李欣豪*完成时间:2017年12月14日*版本号:v1.0*问题描述:采用顺序存储方式存储串,实现下列算法并测试:(1)试编写算法实现将…

[ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify uniq

angularjs 使用ng-repeat报错 <div ng-init"words [高校,高校,高校]" ng-repeat"word in words">{{word}} </div> [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use track by expression to specify unique keys 发现是因为相…

java 并列排名,178. 分数排名

题目描述编写一个 SQL 查询来实现分数排名。如果两个分数相同&#xff0c;则两个分数排名(Rank)相同。请注意&#xff0c;平分后的下一个名次应该是下一个连续的整数值。换句话说&#xff0c;名次之间不应该有“间隔”。-----------| Id | Score |-----------| 1 | 3.50 || 2 |…

编写高质量代码改善C#程序的157个建议——建议130:以复数命名枚举类型,以单数命名枚举元素...

建议130&#xff1a;以复数命名枚举类型&#xff0c;以单数命名枚举元素 枚举类型应该具有负数形式&#xff0c;它表达的是将一组相关元素组合起来的语义。比如&#xff1a; enum Week{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday} 在这里&#xff0c;Week对于星…

python 定义变量_第三章(第2节):变量和常量

变量的概念基本上和初中代数的方程变量是一致的&#xff0c;只是在计算机程序中&#xff0c;变量不仅可以是数字&#xff0c;还可以是任意数据类型&#xff0c;比如我们上节课刚刚学过的基本数据类型或者我们后面要学的自定义数据类型。所谓常量就是不能改变的变量&#xff0c;…