你好,我是悦创。本期我们来 发表一篇,来自听着风好友的投稿。
我们一般所了解到的爬虫都是爬取一个网站,但是当我们想要爬取多个网站的时候,就只能写两个爬虫程序来爬取,那么所需要的时间也会更多。那么,我们如何才能用爬取一个网站的时间来实现两个甚至多个网站的爬取呢?
![投稿|骚操作:利用多线程同时爬取多个网站_多线程_02](https://s2.51cto.com/images/blog/202106/09/e320f0562e37f8b277ddc65d83a12c0f.jpeg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_1184)
这里,我们就会用到多线程。多线程在Python当中实现的库叫做threading。
我们先来简单了解一下这个模块是怎样使用的,要使用这个模块,我们就必须先通过import threading导入它,我们先定义两个函数来模拟两个不同的工作,比如唱歌和跳舞,然后再创建一个main函数创建并启动线程,最后再调用main函数,这样就实现了多线程这一功能。
![投稿|骚操作:利用多线程同时爬取多个网站_多线程_03](https://s2.51cto.com/images/blog/202106/09/ea7ad7131f1b97d8a5a43102ea0f42be.jpeg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_1184)
运行上面的程序,我们看它的结果,它是同时唱歌和跳舞。如果说我们不使用多线程的方式来运行,那么它就是三次唱歌结束之后才会跳舞。
![投稿|骚操作:利用多线程同时爬取多个网站_多线程_04](https://s2.51cto.com/images/blog/202106/09/6c44ced5f395a90ed37128d12a2ca820.jpeg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_1184)
![投稿|骚操作:利用多线程同时爬取多个网站_多线程_05](https://s2.51cto.com/images/blog/202106/09/24d629141be0d295d6ac073780941bff.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_1184)
![投稿|骚操作:利用多线程同时爬取多个网站_多线程_06](https://s2.51cto.com/images/blog/202106/09/d93cb926595513c9100e5b2d0643d14a.jpeg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_1184)
![投稿|骚操作:利用多线程同时爬取多个网站_多线程_05](https://s2.51cto.com/images/blog/202106/09/24d629141be0d295d6ac073780941bff.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_1184)
同样的道理,我们实现多网站同时爬取,首先要分别写好单个网站的爬虫程序,然后新建一个python文件,导入threading模块,然后再将我们之前写好的单个网站的爬虫程序复制到我们新建的文件当中,再定义一个main函数,将每一个网站的爬虫分别作为一个线程并启动,然后再运行我们最后定义的main函数,这样,就实现了我们多个网站的爬取。
![投稿|骚操作:利用多线程同时爬取多个网站_多线程_08](https://s2.51cto.com/images/blog/202106/09/48afc1eb2b607b90a476ae5ca88e6b37.jpeg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_1184)
![投稿|骚操作:利用多线程同时爬取多个网站_多线程_05](https://s2.51cto.com/images/blog/202106/09/24d629141be0d295d6ac073780941bff.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_1184)
比如这里我们同时爬取三个网站,分别是懂车帝,斗鱼,百度图片,每一个网站的爬虫分别先用三个函数封装好,然后分别创建并调用三个函数,这样就实现了同时对懂车帝,斗鱼,百度图片的爬取。
当然,我们这里说同时爬取多个网站,只是为了更好的理解多线程的概念以及用法,它的主要作用并不是实现同时爬取多个网站,而是同时爬取网站的不同内容或者同时进行不同的功能和操作。比如说,我们在爬取网站图片的同时再爬取网站的文本内容,或者一边解析数据的同时一边保存数据,这样,会在很大程度上提高我们爬虫程序的爬取速度和效率。