800819103
在线客服,实时响应qq群
在线客服,实时响应客服电话
13318873961大数据时代,爬虫需要采集的数据越来越多,小爬虫是无法满足采集工作的,而且效率也非常慢,通常爬虫可以使用多线程加快采集工作,提高工作的效率,那么如何实现多线程分步爬取呢?
另外,采用多线程,也需要注意控制采集的速度,避免给对方带去毁灭性的伤害。
Python里控制多线程只需要用到模板threading,而且只需要用到其中的Thread。
简单的使用方法如下:
Thread使用方法为:
threading.Thread(target=线程运行的函数,args=(参数)) 其中参数用逗号分隔,并以逗号结尾。
随后使用start启动。
运行结果如下:
可以看到五个线程同步运行,因sleep设置的时间相同,所以也同步结束。
但有一个缺点是第16行代码在五个线程启动后随即也就运行了,相当于此时主线程已经结束了而那五个子线程还在运行。
控制策略有两个
修改代码如下:
1 for i in range(1,thread+1):
2 t = threading.Thread(target=spider,args=(i,))
3 t.setDaemon(True)
4 t.start()
运行结果如下:
子线程在主线程结束的时候也同步结束,未运行的部分也就不再运行了。
修改代码如下:
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模板里所有的东西了。
在整理好需要处理的数据列表后,我们只需要将列表分段分别交给不同的线程来处理,主线程等待所有数据处理完毕之后再进行下一步操作,如下:
运行结果如下:
五个线程分步处理各自被分配到的数据,总体运行时间大幅缩减。当然机器给力的话,可以增加线程数,得到更快的速度。