如何基于线程池提升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 自动刷博客浏览量实例代码
Jun 14 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
Python中字典的浅拷贝与深拷贝用法实例分析
Jan 02 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
python解决字符串倒序输出的问题
Jun 25 Python
Python第三方库face_recognition在windows上的安装过程
May 03 Python
python面试题之列表声明实例分析
Jul 08 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
python线性插值解析
Jul 05 Python
Python扫描端口的实现
Jan 25 Python
python可视化之颜色映射详解
Sep 15 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的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题
2007/01/09 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
Jquery遍历checkbox获取选中项value值的方法
2014/02/13 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
2017/01/06 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
Vue实现移动端拖拽交换位置
2020/07/29 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
Python中的pass语句使用方法讲解
2015/05/14 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
Python Django基础二之URL路由系统
2019/07/18 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
python高级特性简介
2020/08/13 Python
python/golang 删除链表中的元素
2020/09/14 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
检察官就职演讲稿
2014/01/13 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
甲乙双方合作协议书
2014/10/13 职场文书
政风行风评议工作总结
2014/10/21 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
企业安全生产规章制度
2015/08/06 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python