地址:http://www.heibanke.com/lesson/crawler_ex03/
本关的难点是从页面解析并拼接出需要的目标密码,理解题目很重要啊~
另外获取密码的页面加载耗时很长,也需要考虑如何处理。
解题思路
首次进入题目页面,同样的跳转到了登录页面:
登录成功后,出现如下页面,发现还是猜密码。
但这次不是试出来的需要找出来,那从哪里找呢?先随便输入个密码
提示密码错误,同时给出了找密码的页面,继续访问:
初步观察,页面的表格中有两列,其中一列是密码的位置,另外一列是密码的值,猜测是将密码的值拼接成一个字符串,但是页面只有13
页,每页8个数值,正好100个数,而位置数最大的出现了100
,将这100个数放入到dict(location,value)
里,然后再对dict的key进行排序,对value进行拼接,不就得到密码了嘛。
然而现实是残酷的,发现密码的位置
中存在重复,也就是遍历完13页数据,并不能得到所有的密码值
,然后我就猜想是不是对没有出现在页面的位置进行填充0
处理,发现还是失败。
在多次试验中,发现每次获取到的密码的位置并不是相同的,也就是页面里的随机
的意思,也就是不断的调用查询密码列表页面,总是能够获取到所有密码的值
的。
实现代码
1 | # coding=utf-8 |
最终执行了62次后获取到了全部密码。
多线程版
经过上面的程序,发现执行过程比较漫长,另外页面也有提示说网页会慢半拍
,实验证明运行一次用时差不多1400s,将近24分钟啊! 😵
那么也许需要一个高效率的方法进行解析,多线程?
1 | # coding=utf-8 |
多线程下,也许是网站限制,发现不管设置几个线程,运行时间总是在470s左右,不到8分钟,虽说时间仍然很长,但是比单线程版本已经有了明显提升。 😬