专栏首页python爬虫实战之路Python爬虫-百度模拟登录(一)

Python爬虫-百度模拟登录(一)

百度模拟登录终于要呈现在大家眼前了,最近比较忙,晚上又得早点休息,这篇文章写了好几天才完成。这个成功以后,我打算试试百度网盘的其他接口实现。看看能不能把服务器文件上传到网盘,好歹也有几T的空间。

登录百度

先清理浏览器缓存,打开Charles,登录一次百度主页,抓取到登录过程。

本来是想改一下写作的格式,美观一些,但是想了想,还是按照分析的顺序来写,这样有利于大家了解一种分析的思路。看过上一篇新浪微博PC端模拟登陆的应该知道,首先要找到登录的请求,一般为post,地址中有login

请求找到了,参数......,太TM多了。先观察一下参数,一般无序、随机、没有什么规则的参数有可能是变化参数,其他的一般都是固定参数。当然,也可以多次登录抓包,对比一下大概也能确定。那么我们确定一下变化的参数:token、tt(时间戳)、codestring、gid、password、verifycode(验证码)、rsakey、ppui_logintime、fp_uid、fp_info、dv、traceid

参数分析

确定了需要分析的参数,从哪个开始分析呢?随意吧

一般有些参数之间是有关系的,比如token的请求参数里需要gid参数

这里我就不一一去分析参数间的关系了,直接来了啊

参数 gid

一方面其他参数需要它,另外就是这个参数是完全由本地js生成的。先看一下这个参数

搜索一下这个值,没有。那么我们再来搜一下这个name,就是gid,之前说过我们一般是找xxx=这种,先来搜一下gid=

点击loginv4_9f3632a.js,然后在JavaScript页签搜索gid=

有好几个,我圈出了这个getqrcode?请求,为啥捏?看图,我们找到这个请求

看到请求里的gid值了吗?跟我们登录的gid是一样的,那就确定是这个地方了,gid=e.guideRandom,然后在这个脚本里搜一下guideRandom

然后翻译一下这个js,这......就自己去琢磨吧

参数 token

先搜索token的值

得到请求地址:https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&tt=1520951400830&class=login&gid=E8ED064-D480-4F3E-A5CE-BCF25F8DD1E2&loginversion=v4&logintype=dialogLogin&traceid=&callback=bd__cbs__6l1agx

就剩下callback,其他的请求里也需要callback这个

搜一下bd__cbs__,为啥要搜这个?这个真的很痛苦,callback搜出来一大片,而且没看出来什么有效数据,值又搜不到,那就搜一半吧,你问我为啥?第六感,不管你信不信,反正我是信了

其实呢,有好几个请求都有这个参数callback,然后我们观察这些callback的规律,基本就是这个bd__cbs__没变,所以可以搜一下它试试,搜到两个

分析一下这段代码,基本就是c.getUniqueId这个函数了,搜一下这个函数

oj8k,找到了,代码贴下面,为什么这么写?自己查js去,当然有更简单了pyv8或者psexecjs

Token这里我要再说一下,参数我们分析完了,你以为请求就成功了吗?

Oh!yeah,之前我们都是得到所有请求参数就访问成功了

就这里卡了我好长时间。那么碰到这种情况要从那几个点着手呢,首先我想到的是cookies

然后向上去找Set Cookie的地方

访问首页得到四个cookie值,H_PS_PSSID、BIDUPSID、PSTM、BAIDUID

这里又找到一个BDORZ,首页很简单,没有什么参数,

注意看这几个参数,就在上面四个cookies中,t是时间戳,参数都搞定了,那么Token的cookies也都搞定了,终于可以成功了,图样图森破,还是不行。MMP,cookies搞定都不行,我还有招,请求头!!!浏览器里直接拷过去,看你还想咋的

然鹅....,算你狠,不过我不会轻易认输的

调试他娘的,一遍一遍又一遍,两遍三遍四五遍,各种姿势都试了,终于高潮要来了,特么的请求不一样

先上图

浏览器的正常请求

程序发送的请求

看到不一样了吧,为什么呢?我们在用requests库的时候,get请求我比较习惯用.get(url, params=data),参数用params的方式传入,再来看一下Token请求的参数

getapi是空,那很明显

data = {  "getapi":"",  "tpl":"mn",
  ....
}
session.get(url, params=data)

然后发送的请求就是/v2/api/?getapi=&tpl=mn&....,实际上正常的请求是/v2/api/?getapi&tpl=mn&...,竟然还有这种操作,我真的是第一次碰到,改一下

data = {  "tpl":"mn",
  ...
}
url = ".../v2/api/?getapi&{}".format(urlencode(data))
session.get(url)

到这里才算OK了,最后总结了一下,请求的那个坑、请求头中的Referer、cookies,终于可以说一句OJ8K

参数 dv

为什么要先说这个dv,首先这个我没完全破解,另外就算你用固定值,也不影响结果,这个不能详细说,否则得好几帖子,我们先搜dv=

切换到javascript页签

我们可以搜一下dv_Input这个控件,它是没有的,我就不展示了,然后应该就是window.LG_DV_ARG了

这里有dvjsinput,上图我们也看到了这个,切换到javascript页签看一下

然后打开浏览器,清空缓存,打开隐身窗口,打开开发者工具,访问百度首页

观察一下dv值的特点,可以找一些比较有特色的部分搜一下,比如tk、@,这样尽量减少我们调试js的过程,因为真的很痛苦

在console里面执行一下这个计算,跟我们dv前面的值是不是类似,那就是它了,不管你是不是我都认为是。然后再搜一下@

刚才计算的Token+@+Ue(xx),这个肯定就是dv了,至于Ue嘛,我没搞定,不过发现没啥意义,写固定值也可以,也就不用费心去找这个了。

文章分享自微信公众号:
python爬虫实战之路

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:星星在线
原始发表时间:2018-05-11
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Python爬虫-百度模拟登录(二)

    参数值都看到了,token、tt、dv、callback这些变化的参数我们都知道了吧,其他的参数固定,别问我为什么。这个logincheck注意到了吗?是不是有...

    星星在线
  • Python3爬虫模拟登录爬取百度图片

    pycharm,python3.7,selenium库,request库,os文件库,re模块的正则表达式运用,自行下载chromedriver自测软件

    HcodeBlogger
  • 爬虫篇 | 学习Selenium并使用Selenium模拟登录知乎

    最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍.

    龙哥
  • Python爬虫之模拟登录wechat

    不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈、关注的新闻或是公众号、还有个人信息或是隐私都被绑定在了一起。既然它这么重要,如果我们可以利用爬虫模拟...

    Python数据科学
  • python爬虫scrapy模拟登录demo

    背景:初来乍到的pythoner,刚开始的时候觉得所有的网站无非就是分析HTML、json数据,但是忽略了很多的一个问题,有很多的网站为了反爬虫,除了需要高可用...

    公众号---人生代码
  • Python爬虫者的福音!一个神库,汇总了数十个主流网站的模拟登陆方法

    网络上有形形色色的网站,不同类型的网站爬虫策略不同,难易程度也不一样。从是否需要登陆这方面来说,一些简单网站不需要登陆就可以爬,比如之前爬过的猫眼电影、东方财富...

    一墨编程学习
  • 从零开始系统化的学习写Python爬虫

    主要是记录一下自己写Python爬虫的经过与心得。 同时也是为了分享一下如何能更高效率的学习写爬虫。 IDE:Vscode Python版本: 3.6

    HACK学习
  • 「Python爬虫系列讲解」十一、基于登录分析的 Selenium 微博爬虫

    前文回顾: 「Python爬虫系列讲解」一、网络数据爬取概述 「Python爬虫系列讲解」二、Python知识初学 「Python爬虫系列讲解」三、正则表达式...

    荣仔_最靓的仔
  • 爬虫入门到放弃03:爬虫如何模拟人的浏览行为

    上一篇文章主要讲了如何解析网页,本篇文章主要来写一下如何发起请求。可能看过前两篇文章的人就开始疑惑了,请求?你不是说一行代码就可以搞定了么。的确,一行代码就能搞...

    叫我阿柒啊

扫码关注腾讯云开发者

领取腾讯云代金券