如何基于线程池提升request模块效率


Posted in Python onApril 18, 2020

普通方法:爬取梨视频

import re
import time
import random
import requests
from lxml import etree

start_time = time.time()

url = "https://www.pearvideo.com/category_3"
headers = {
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
}

ex = 'srcUrl="(.*?)",vdoUrl=srcUrl'

def request_video(url):
  """
  向视频链接发送请求
  """
  return requests.get(url=url, headers=headers).content

def save_video(content):
  """
  将视频的二进制数据保存到本地
  """
  video_name = str(random.randint(100, 999)) + ".mp4"
  with open(video_name, 'wb') as f:
    f.write(content)

    
# 获取首页源码
page_text = requests.get(url=url, headers=headers).text

tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@class="listvideo-list clearfix"]/li')

video_url_list = list()
for li in li_list:
  detail_url = "https://www.pearvideo.com/" + li.xpath('./div/a/@href')[0]
  
  # 获取该视频页面的源码
  detail_page_text = requests.get(url=detail_url, headers=headers).text
  
  # 正则匹配视频的URL
  video_url = re.findall(ex, detail_page_text, re.S)[0]
  video_url_list.append(video_url)
  
  content = request_video(video_url)
  save_video(content)


print("执行耗时: ", time.time() - start_time)

执行耗时: 147.22410440444946

使用线程池:爬取梨视频

# 使用线程池爬去梨视频的
import re
import time
import random
import requests
from lxml import etree
from multiprocessing.dummy import Pool


start_time = time.time()

url = "https://www.pearvideo.com/category_3"
headers = {
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
}

ex = 'srcUrl="(.*?)",vdoUrl=srcUrl'

def request_video(url):
  """
  向视频链接发送请求
  """
  return requests.get(url=url, headers=headers).content

def save_video(content):
  """
  将视频的二进制数据保存到本地
  """
  video_name = str(random.randint(100, 999)) + ".mp4"
  with open(video_name, 'wb') as f:
    f.write(content)

    
# 获取首页源码
page_text = requests.get(url=url, headers=headers).text

tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@class="listvideo-list clearfix"]/li')

video_url_list = list()
for li in li_list:
  detail_url = "https://www.pearvideo.com/" + li.xpath('./div/a/@href')[0]
  
  # 获取该视频页面的源码
  detail_page_text = requests.get(url=detail_url, headers=headers).text
  
  # 正则匹配视频的URL
  video_url = re.findall(ex, detail_page_text, re.S)[0]
  video_url_list.append(video_url)
  
pool = Pool(4)
  
#使用线程池将视频的二进制数据下载下来
content_list = pool.map(request_video, video_url_list)
  
# 使用线程池将视频的二进制数据保存到本地
pool.map(save_video, content_list)  

print("执行耗时: ", time.time() - start_time)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python通过select实现异步IO的方法
Jun 04 Python
python DataFrame 修改列的顺序实例
Apr 10 Python
对numpy中array和asarray的区别详解
Apr 17 Python
Python中return self的用法详解
Jul 27 Python
Django csrf 两种方法设置form的实例
Feb 03 Python
python如何制作缩略图
Apr 30 Python
Python远程视频监控程序的实例代码
May 05 Python
超实用的 30 段 Python 案例
Oct 10 Python
Pygame的程序开始示例代码
May 07 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 Python
opencv读取视频并保存图像的方法
Jun 04 Python
新建文件时Pycharm中自动设置头部模板信息的方法
Apr 17 #Python
使用python无账号无限制获取企查查信息的实例代码
Apr 17 #Python
jupyter notebook中美观显示矩阵实例
Apr 17 #Python
Python3将ipa包中的文件按大小排序
Apr 17 #Python
利用pyecharts读取csv并进行数据统计可视化的实现
Apr 17 #Python
pyecharts动态轨迹图的实现示例
Apr 17 #Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 #Python
You might like
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
JS重要知识点小结
2011/11/06 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
基于javascript制作经典传统的拼图游戏
2016/03/22 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Python实现在线程里运行scrapy的方法
2015/04/07 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
Python自动发邮件脚本
2017/03/31 Python
python逆向入门教程
2018/01/15 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
Html5实现iPhone开机界面示例代码
2013/06/30 HTML / CSS
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
中国文明网签名寄语
2014/01/18 职场文书
音乐专业自荐信
2014/02/07 职场文书
早会主持词
2014/03/17 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
计算机网络专业求职信
2014/06/05 职场文书
担保贷款承诺书
2015/04/30 职场文书
Spring实现内置监听器
2021/07/09 Java/Android