Python爬虫-速度(3)
018.11.11
前言
早之前是以为会一口气把爬虫这个系列了结的,但不知何故,居然没做到——我肯定不会怪罪自己的拖延症呀!只是有开头就得有结尾,毕竟我是那么那么注重仪式感的人。
再从GitHub把代码clone下来,发现不能用了。刨根问底,居然是学校就业网站改版,这倒令我惊奇。会是因为哪个老师或者学生确实无聊所以动了“美好校园”的念头?缘由于我来说肯定是不得而知的。
重写一份吧。结构上相比两个月前的代码是有所优化的,但不至于天壤之别。相似处多,所以不再单独对此次基础代码进行说明。
此篇目的是:基于(2)的提速方法,改写(1)爬虫代码。当然了,因为网页改版,接下来我会是基于新的代码来改写。
那就开始啦。
普通爬虫
此次代码对应目录:NewSchoolJobsCrawl
效果如下:
多次运行,整个程序跑完在60s左右。
多进程提速
在ProcessPoolExecutor助攻下,多进程爬虫的实现真的会很简单。我们只需要把浏览页处理的逻辑提取出来(我把它放到了main()中),然后构建一个进程池去执行这部分的代码就好。这样说会很抽象,将下面的代码与普通爬虫的代码做对比,理解起来容易些。
def main(url):
html, __ = get_one_html(url)
if html:
for title, url in extract_title_url(html):
# 只保留公司名
companyName = re.split(r"(|\(|\s", title)[0]
mkdir(companyName)
# 详情页面,详情页链接
detailHtml, curUrl = get_one_html(join_url(url