爬虫的本质就是模拟client频繁请求server,获取响应数据,对响应数据进行解析处理。常规的串行方式同步阻塞执行,必须等待一个任务处理完后才能之后才能继续下一个,这样效率就非常低。最常用的聚焦爬虫对数据处理的IO操作(阻塞)相对密集,因此需要考虑使用异步方案解决。
1.同步串行:提交任务之后,只有等待这个任务执行完毕返回结果才会继续执行下一个,这样效率比较低下!
1 ''' 2 同步串爬取 3 ''' 4 import os 5 import time 6 import requests 7 headers={ 8 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' 9 } 10 urls = [ 11 ('百度知道','https://zhidao.baidu.com/daily?fr=daohang'), 12 ('新浪', 'https://www.sina.com.cn/'), 13 ('腾讯网', 'https://www.qq.com/'), 14 ('简书','https://www.jianshu.com/'), 15 ('今日头条','https://www.toutiao.com/'), 16 ('新浪财经','https://finance.sina.com.cn/'), 17 ('东方财富','http://www.eastmoney.com/'), 18 ('襄阳家教网','http://www.jiajiao100.com/'), 19 ] 20 21 #同步串行爬取 22 start=time.time() 23 for url_info in urls: 24 url=url_info[1] 25 path=os.path.join('response',url_info[0]+'.html') 26 response=requests.get(url,headers=headers) 27 response.encoding='utf-8' 28 with open(path,'w',encoding='utf-8')as f: 29 f.write(response.text) 30 t=time.time()-start 31 print(t)#4.652341365814209