如何基于线程池提升request模块效率
作者:返回主页人生苦短,我用python 发布时间:2023-06-12 11:13:44
标签:线程池,request,模块
普通方法:爬取梨视频
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)
来源:https://www.cnblogs.com/youhongliang/p/12708250.html
0
投稿
猜你喜欢
- 之前有写过一篇浏览器的tab设计,这回说说网站的tab设计。一说到tab很自然地就想到了导航、信息架构。随着网站信息结构的复杂化,选择tab
- 有些时候我们发现一些模块没有提供pip install 命令和安装教程 , 只提供了一个setup.py文件 , 这个时候如何安装呢?步骤打
- 我是一个初入互联网的视觉设计师,和以往做设计感受最大的不同就是:一个设计的最终定稿会受到多方面的挑战,有来自产品经理的,来自开发的,来自测试
- 众所周知,FileSystemObject(fso)组件的强大功能及破坏性是它屡屡被免费主页提供商(那些支持ASP)的禁用的原因,我整理了一
- 有四个变量影响磁带备份设备的性能,并使 SQL Server 备份及还原性能操作得以在大体上随添加更多磁带设备而提高线性比例。◆软件数据块大
- 通常我们做网站,设计版面布局是第一步,如何做到版面布局具有创意又美观大方呢?这就需要一定的版面处理功底。让我们先来了解一下版面布局的步骤:一
- 初学者可以看看。在的img标签有两个属性分别为alt和title,对于很多初学者而言对这两个属性的正确使用都还抱有迷惑,当然这其中一部分原因
- asp之家注:一个取图片尺寸的asp类,支持jpg,gif,png格式的图片文件;读取图片的尺寸其实很有用,当我们在设计一个新闻文章添加页面
- 我使用“ Web 2.0设计”来形容目前占主导优势的网页设计风格, 很多人用这个词来形容:网络经济的复苏网站和用户之间更高水平的交互或一种社
- 请先看看以下演示中的图案文字。这可不是图片效果,而是用CSS滤镜中的Chroma() 语句做成的文本文
- php中-> 、=>、::、$this->四种符号在代码中很常见,使用很广泛。这篇文章主要介绍了php中-> 、=&
- 提到sa弱口令,我们首先就会想到,许多数据库都有1个类似的超级管理员账号,比如:Oracle是"system"和&quo
- 主要使用IE各个阶段实现的一些方法,从中也可以看出IE的发展史。暂时提供到IE4的判定。var isIE = window.ActiveXO
- 有时候在一个页面用到收放功能的时候时,总有一个虚线框在触发收放的功能按钮上,显得特别刺眼,那如何去除这个虚线框呢?在IE下,需要在标签 a
- 本文代码将一些简单常用的SQL语句,拆分、封装成链式函数与终结函数,链式操作没有先后之分,实现傻瓜式mysql数据库操作。 同时学习下静态成
- ASP是目前一种广为应用的用来快速构建动态WEB站点的编程语言,默认的内置开发语言是VBScript,由于ASP和微软Windows系列操作
- 本文将介绍使用Dreamweaver来制作滑动菜单的方法,言归正传,废话少说。准备工作如下: 1. 在dw中新建一个空白文档(或者打开你要添
- 死锁是指在某组资源中,两个或两个以上的线程在执行过程中,在争夺某一资源时而造成互相等待的现象,若无外力的作用下,它们都将无法推进下去,死时就
- html5带给我们的不仅仅是更多语义丰富的标签,还有更多更牛逼的特性,比如“离线存储”。 对于台式电脑来说,或者它并没有带来什么惊喜,但是对
- 之前写过一篇文章《EmEditor代码片段插件介绍》,现在项目越来越多,越来越大,不再用EmEditor,而用IntelliJ IDEA。这