首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 爬虫闯关-续

不正经开场白

上回

Python 爬虫闯关(第四关)

中,我们发现程序执行过程非常漫长,将近 24 分钟啊!另外页面也有提示说:网页会慢半拍。那么也许需要一个高效率的方法进行解析,多线程?

1

题意再理解

本关的题目内容,这里再简单说一下:

页面给出了闯关所需密码的随机位置,以及该位置的值,我们需要遍历所有页面,获取到 100 位的密码。

不清楚的翻下历史。

其中,值得注意的两点:

每一页的载入速度非常慢(正如页面内容所述),大约需要 15 秒,这是黑板课后台故意设置的;

每个页面是动态加载的,每次获取到的密码的位置并不是相同的,也就是检索完 13 页数据也不能得到 100 位的密码,需要重复检索以得到其余位置的密码。

由此可见,必须使用多线程才能迅速得到密码。

这就是多线程

2

闯关思路

多线程编程使用 threading 模块,这里我们对 Python 多线程我们不再详细展开,后面有机会再给大家说,有兴趣的也可以自己学习下。

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

初始化一个字典,用来存放密码;

每个线程都不断获取页面的全部位置和值,并将它们更新到字典中;

判断字典长度,如果字典的长度小于 100,则继续抓取页面数据并跟新字典,直到长度满足 100;

将字典中的数据转换为字符串,然后通过 post 提交到服务器进行登录;

3

实现

代码有点长,代码源文件可以回复【第四关】获取。

多线程下,也许是网站限制,发现不管设置几个线程,运行时间总是在 470s 左右,不到 8 分钟,虽说时间仍然很长,但是比单线程版本已经有了明显提升。

有同学后台问我,这个网站怎么设置了多个线程不管用啊,其实我也解决不了,我们了解原理不就好了~

近期可能会有赠书活动,大家多关注哦!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180820G1POBT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券