多线程爬虫
学习python的第八天(2020.04.13)
在掌握了requests和正则表达式以后,我爬取了自己写的博客,很简单,但是,我用的爬虫的进程只有一个进程,一个线程,因此称为单线程爬虫。单线程爬虫每次只能访问一个页面,不能充分利用计算机的网络带宽。所以就浪费了很多时间。如果可以让爬虫同时访问10个网页,就相当于爬取速度提高了10倍。为了达到这个目的,就需要使用多线程技术了。
爬虫属于I/O密集型程序,所以使用多线程可以大大提高爬取率。
multiprocessing本身是python的多进程库,用来处理与多进程相关的操作。
今日任务:
使用单线程和多线程访问相同网页80次,并记录他们的访问时间
代码如下
#coding:utf-8
#coding:GBK
import requests
import time
from multiprocessing.dummy import Pool
#创建一个自定义函数,用来偷懒写requests获取网页
def query(url):
requests.get(url)
#单线程访问网页代码如下
start =time.time()
for i in range(80):
query('http://www.baidu.com')
end =time.time()
print("单线程访问百度80次时间为:",end-start)
#多线程访问网页代码如下
url_list=[]
start =time.time()
for i in range(80):
url_list.append('http://www.baidu.com')
pool =Pool(6)
pool.map(query,url_list)
end =time.time()
print("多线程访问百度80次时间为:",end-start)
运行结果
小小说明
理论上看这多线程访问时间少,其实不然,他只是用了6个进程同时进行访问,所以花的时间其实很多,cpu读写多用了。
今天内容很少,但是( •̀ ω •́ )y要牢记单线程和多线程的知识点,一定要灵活使用。