爬虫闯关第四关

       第四关url如下:
       http://www.heibanke.com/lesson/crawler_ex03/

分析

       点击进入页面后也是和第三关一样,需要登录才能进行下一步操作(如果之前登录了,服务器会根据浏览器保存的cookie自动返回登录后的页面)。登录后的页面如图:

爬虫第四关_1

爬虫第四关_1


       根据提示,密码不再是之前的30以内的数字了,是需要找出来的很长的密码。至于怎么找,当前页面没有任何提示,那么我们先随便输入昵称和密码进入下一个页面。跳转的页面如图:
爬虫第四关_2

爬虫第四关_2


       点击“在这里耐心找”按钮,跳转到密码列表的页面:
爬虫第四关_3

爬虫第四关_3


       页面内容给出了密码的随机位置,以及该位置的值,一共有13页,最后一页只有4位,那么密码就有100位。所以需要按照位置顺序简单组合密码的值就可以得到最终的密码了。
       值得注意的两点:每一页的载入速度非常慢(正如页面内容所述),大约需要15秒,是服务器强制控制的;每个页面是动态加载的,会随机给出100个位置中的8个,而且100个位置中有许多位置是重复的,换言之13页检索完也不能得到100位的密码,需要重复检索以得到其余位置的密码(第二点我也被坑了好多次才发现)。由此可见,必须使用多线程才能迅速得到密码。

实现

       多线程编程使用threading模块,登录过程和第3关一样,基本只需要在第3关的基本上增加获取密码的功能就可以了。

       代码中dict字典用于存储密码的位置/值,当长度达到100后停止检索页面。然后将dict的键提取到列表,用sort()方法对键进行升序排序,最后按照升序键顺序输出值,并依次累加到字符串passwd上。
       多线程检索页面时,超过两个线程同时运行就无法获取到数据。因此我采用Queue控制线程数在2个。在运行一段时间后,便可得到100位密码字符串passwd以及闯关成功的页面提示。

爬虫第四关_4

爬虫第四关_4


总结

       这关主要考察多线程并行处理来提高工作效率以及线程数控制的爬虫技巧。



  copyright@黑月神话,转载请注明出处:vjson.com

爬虫闯关第四关》上有2条评论

  1. 匿名

    您好! 请问“多线程检索页面时,超过两个线程同时运行就无法获取到数据。”是为什么?

发表评论