您的位置:新闻资讯 >文章内容
爬虫如何实现多线程分步爬取
来源:Geek_Arking 作者:admin 时间:2018-12-14 17:53:28

大数据时代,爬虫需要采集的数据越来越多,小爬虫是无法满足采集工作的,而且效率也非常慢,通常爬虫可以使用多线程加快采集工作,提高工作的效率,那么如何实现多线程分步爬取呢?

另外,采用多线程,也需要注意控制采集的速度,避免给对方带去毁灭性的伤害。

Python里控制多线程只需要用到模板threading,而且只需要用到其中的Thread。

简单的使用方法如下:

如何实现多线程分步爬取

Thread使用方法为:

threading.Thread(target=线程运行的函数,args=(参数)) 其中参数用逗号分隔,并以逗号结尾。

随后使用start启动。

运行结果如下:

可以看到五个线程同步运行,因sleep设置的时间相同,所以也同步结束。

但有一个缺点是第16行代码在五个线程启动后随即也就运行了,相当于此时主线程已经结束了而那五个子线程还在运行。

控制策略有两个

在start之前把子线程设置为守护线程

修改代码如下:

1 for i in range(1,thread+1):

2   t = threading.Thread(target=spider,args=(i,))

3   t.setDaemon(True)

4   t.start()

运行结果如下:

子线程在主线程结束的时候也同步结束,未运行的部分也就不再运行了。

在主线程中使用join,让主线程挂起等待子线程结束

修改代码如下:

1 for i in range(1,thread+1):

2     t = threading.Thread(target=spider,args=(i,))

3     t.start()

4 t.join()

从运行结果可以看到主线程停留在t.join()的位置,一直等到五个子线程全部结束后才开始继续向后运行。

以上就是需要用到的threading模板里所有的东西了。

在整理好需要处理的数据列表后,我们只需要将列表分段分别交给不同的线程来处理,主线程等待所有数据处理完毕之后再进行下一步操作,如下:

如何实现多线程分步爬取

运行结果如下:

五个线程分步处理各自被分配到的数据,总体运行时间大幅缩减。当然机器给力的话,可以增加线程数,得到更快的速度。


相关文章内容简介
在线咨询
微信公众号

微信公众号

回到顶部