Skip to content

proudlily/baidu_spider

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 

Repository files navigation

抽象:

想象有个人在浏览器中点击操作。 也就是有request对象,和response对象。

要做的事==模拟一个客户端

看了《HTTP权威指南》,发现没啥卵用。除了重新复习下头部信息,cookie操作。

代码实现

刚开始还是蛮模糊的,隐约知道怎么做。但是代码怎么写,还没有想好。
然后就上谷歌,看有没有人做过。按照前人的指导,我就慢慢做出来了。
模拟成功的判断的依据是,post后的页面,err_no=0
刚开始,其实我也没啥把握。尤其是需要post那么多的数据。去哪找。后来,想无论如何,还是完成吧,好歹知道到哪一步不成功,有个交代。

步骤分解

网上都有教程,讲地不是有的比较罗嗦,没重点。要么就是太简单。经过反复查看他们的文章。我简单地写下:
讲许多,重要的是作品完成之前的思考
许多人都没讲到这个。所以大家可以去我下面给的链接,里面有讲
怎么去着手模拟百度登录。

可以用IE9,chrome,firefox;
我觉得firefox比较适合,顺手。但是也不否认,chrome的价值。
我是开着两个浏览器,F12看http的网络请求。

大家都知道,网上的东西不一定可信,并且斟酌信息的正确也比较难。找东西也不是简单

我在这写,遇到的几个难点,其他的都有前辈给解决掉了。

1.RSA加密

之前没有做过,拿到手上一时半会没反应。继续谷歌。

2.百度的中文验证码

查了golang的库,有识别字母数字的,但是没有识别中文的。 有用cgo,但是我也不熟悉c,c++.再着主要目的是成功模拟登录。我就肉眼识别了。

3.用go调用js

这个之前也没有做过,相当于刚上手。
有库:github.com/robertkrimen/otto

4. 最重要的是理清流程。

分析数据来源,有哪几个步骤。

步骤

1.获取cookie:BAIDUID

2.获取token

 guidRandom()

3.获取public key

登录加密的

  • url: "https://passport.baidu.com/v2/getpublickey" + "?token=" + Token + "&tpl=mn&apiver=v3&tt=" + time+ "&gid=" + Gid + "&callback=bd__cbs__d3en7h"

  • 方法:get
    从页面取出 RSA的 public key 和key

  • 参考代码:生成RSA加密的密码 src/utils/pswd.js

PasswordEncrypt(pswd, pubkey)

4.获取验证吗

  • 1.获取CodeString

  • url: "https://passport.baidu.com/v2/api/?logincheck&` + "?token=" + token + &tpl=mn&apiver=v3&tt= + times+ `&sub_source=leadsetpwd&username=...&isphone=false&dv=&callback=bd__cbs__6fq7ta"

  • 方法:get

  • 从页面取出codeString

  • 2.获取图片

  • url: "https://passport.baidu.com/v2/api/?logincheck& + "?token=" + token + &tpl=mn&apiver=v3&tt= + time+ &sub_source=leadsetpwd&username=...&isphone=false&dv=&callback=bd__cbs__6fq7ta"

  • 方法:get

  • 3.获取验证码。 我看七夜前辈,有确认验证码是否正确的步骤,我也写了。不知道,有没有用

5.post表单

postDict["codestring"] = this.CodeString//验证码的url的参数
postDict["verifycode"] = this.ReadPerson//验证码
postDict["token"] = this.Token//get到的
postDict["rsakey"] = this.PublicKeyResponse.Key //RSA的key
postDict["gid"] = this.Gid//生成的
postDict["password"] = this.RsaPasswd //public KEY加密的

以上就是模拟百度登录的。 获取数据的url的参数,都是组合的。就是说,有的数据是要的。我就不写了,不方便写,不是固定的。

最后,流程都有了,就是写代码的事情了。要参考golang的库,鼓起勇气看函数的提供,看函数的讲解。
七拼八凑,好歹是写完了。

模拟百度登录

弄了一周多点时间的百度登录

参考文档:

About

用golang实现模拟百度登录

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published