「这是我参与11月更文挑战的第30天,活动详情查看:2021最后一次更文挑战」
theme: vue-pro
多线程在 Python 爬虫学习过程中应用落地,提速,提速,再提速。
目标站点分析
本次要抓取的目标为懒人畅听网,其中我随机选择了一个分类,有声小说频道,其余频道可使用雷同的办法抓取,增加遍历之后,可以对全站进行抓取。
列表页分页规则如下
本次依旧只对列表页数据进行提取,只增加多线程模块 threading
的应用,提高采集效率。
1 | txt复制代码http://www.lrts.me/book/category/1/recommend/1/20 |
提取规则模板如下:
1 | txt复制代码http://www.lrts.me/book/category/1/recommend/页码/20 |
全站页码数,可以直接人眼读取,如果增加动态获取,提取读取一下分页处数据即可。
提取最终的数据源如下图所示,包括书名,作者,主播三部分内容。
编码时间
本次案例中对于多线程部分,除共享全局变量外,增加信号量机制,即限制线程并发数量。
信号量机制的简单 Demo 如下所示:
1 | python复制代码 |
运行代码,会发现先运行 3 个线程,再运行 3 个线程,当然同时运行的线程之间是没有先后顺序的。
信号量,即使用 threading
模块的 BoundedSemaphore
类,该类可以设置允许一定数量的线程更改数据,即最多可同时运行几个线程。
代码完整案例如下所示
1 | python复制代码import threading |
代码中 threading.active_count()
部分,用于检测是否存在活跃线程,如无,程序结束。
运行代码,得到如下结果,至此第 23 例已经学习完毕。
收藏时间
代码仓库地址:codechina.csdn.net/hihell/pyth…,去给个关注或者 Star 吧。
==来都来了,不发个评论,点个赞,收个藏吗?==
今天是持续写作的第 203 / 365 天。
可以关注我,点赞我、评论我、收藏我啦。
本文转载自: 掘金