介绍
这篇文章主要讲解了基于线程池提升请求模块效率的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
普通方法:爬取梨视频
进口再保险 导入的时间 进口随机 进口的要求 从lxml进口etree start_time=time.time () url=癶ttps://www.pearvideo.com/category_3" 头={ “User-Agent":“Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36 (KHTML,像壁虎)Chrome/79.0.3945.88 Safari 537.36“; }=& # 39;交货srcUrl=?(。*和# 63;)“,vdoUrl=srcUrl& # 39; def request_video (url): “““ 向视频链接发送请求 “““ 返回请求。get (url=url,标题=头).content def save_video(内容): “““ 将视频的二进制数据保存到本地 “““ video_name=str(随机的。randint (100, 999)) +“.mp4" 张开(video_name & # 39; wb # 39;) f: f.write(内容) #获取首页源码 page_text=请求。get (url=url,标题=标题)。text 树=etree.HTML (page_text) li_list=tree.xpath (& # 39;//ul (@class=發istvideo-list clearfix"]/李# 39;) video_url_list=列表() 李在li_list: detail_url=癶ttps://www.pearvideo.com/"+ li.xpath (& # 39;。/div//@href& # 39;) [0] #获取该视频页面的源码 detail_page_text=请求。get (url=detail_url头=标题)。text #正则匹配视频的URL video_url=re.findall (ex、detail_page_text re.S) [0] video_url_list.append (video_url) 内容=request_video (video_url) save_video(内容) print(“执行耗时:“,time.time () - start_time)
执行耗时:147.22410440444946
使用线程池:爬取梨视频
#使用线程池爬去梨视频的 进口再保险 导入的时间 进口随机 进口的要求 从lxml进口etree 多处理。假进口池 start_time=time.time () url=癶ttps://www.pearvideo.com/category_3" 头={ “User-Agent":“Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36 (KHTML,像壁虎)Chrome/79.0.3945.88 Safari 537.36“; }=& # 39;交货srcUrl=?(。*和# 63;)“,vdoUrl=srcUrl& # 39; def request_video (url): “““ 向视频链接发送请求 “““ 返回请求。get (url=url,标题=头).content def save_video(内容): “““ 将视频的二进制数据保存到本地 “““ video_name=str(随机的。randint (100, 999)) +“.mp4" 张开(video_name & # 39; wb # 39;) f: f.write(内容) #获取首页源码 page_text=请求。get (url=url,标题=标题)。text 树=etree.HTML (page_text) li_list=tree.xpath (& # 39;//ul (@class=發istvideo-list clearfix"]/李# 39;) video_url_list=列表() 李在li_list: detail_url=癶ttps://www.pearvideo.com/"+ li.xpath (& # 39;。/div//@href& # 39;) [0] #获取该视频页面的源码 detail_page_text=请求。get (url=detail_url头=标题)。text #正则匹配视频的URL video_url=re.findall (ex、detail_page_text re.S) [0] video_url_list.append (video_url) 池=池(4) #使用线程池将视频的二进制数据下载下来 content_list=池。地图(request_video video_url_list) #使用线程池将视频的二进制数据保存到本地 池。地图(save_video content_list) print(“执行耗时:“,time.time () - start_time)
看完上述内容,是不是对基于线程池提升请求模块效率的方法有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。