利用Python实现简单的网站模拟登录!爬虫必会技能!

本文主要利用Python的requests库中的Session方法,保留登录过的cookie,用于登录之后的页面。那下面一起来看一下具体怎么做吧。

01

准备工具

Python学习群:683380553,有大牛答疑,有资源共享!是一个非常不错的交流基地!欢迎喜欢Python的小伙伴!

语言: Python(本文用的是3.6版本,建议使用Anaconda安装)

编译器:jupyter notebook(任一Python编译工具)

Python库:execjs,requests

浏览器:chrome

02

分析页面

我们先打开强智科技的页面,输好账号密码之后,按“F12”打开控制台并选中网络资源项(network)。注意要勾选preserve log(保留记录)这个选项,不然后面会找不到那个登录请求。做好这些准备工作后,我们按登录。

之后会跳转页面,而且你会发现控制台里出现了很多的信息。如下图。

我们找到LoginToXk这个响应,然后点击打开,我们可以很清楚的看到请求的信息(本文只是简单的讲解,对于那些网络知识,请读者回去仔细学习)

然后要记下图中所标记的网站。第一个网站是我们发起请求的那个页面,我们可以利用request的post方法,直接向其传送表单信息和请求头来达到登录的效果,并保留下cookie。为此我们需要构建请求头和表单信息。

03

构建请求头和表单信息

还是在Login那里,我们用鼠标滚下去一些就可以找到刚才登录的请求头(request header)信息和提交的表单信息(form data)。如下图。

我们可以看到,请求头是键值对的形式,所以我们之后可以把这些信息复制下来,然后构建成一个Python字典。

我们接着往下看,我们会发现表单信息并不是我们提交的密码和账号信息,而是一个encoded的编码。

经过分析页面响应里的js发现(很久以前看的,现在找不到那个js文件了,所以没能截图),encode是由账号和密码分别经过base64编码加密后拼接起来,然后在它们中间加“%%%”而制成的。

我们可以仿照base64的编码过程编写一段加密的函数,然后将传入的账号和密码分别加密成encode的形式并返回,之后就可以构建请求表单(还是字典形式)。

下图这个是我在网上找的实现base64编码的js函数,所以我需要execjs来执行这段js代码,你完全可以直接使用Python来编写这个函数。

04

实现模拟登录

我们构建好了请求头和表单数据之后,就可以利用request库对页面进行请求,之后没什么难点,直接上完整代码。

我们在执行login这个函数后,输入正确的学号和密码,便可以发现它返回了首页的前端代码。如下。

我们之后可以利用BeautifulSoup这种工具,将这些页面代码生成页面对象。然后对页面的信息进行爬取。

总结

利用这个方法,我们可以爬取我们的学习成绩等信息(至于怎么爬取可能以后会写),然后可以制作成一个一键查询成绩的小功能等等。而其他的网站的模拟登录,大多可以按照这个流程进行实现,只要分析好页面,构建好需要的信息即可。

最后,可能有些人会问,那个网站登录要填验证码怎么办?这时候,我们就要接上验证码识别这个函数了。至于怎么实现,等我有空再写一篇教程吧。我们下次再见。Bye!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190331A07TQ200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励