功能:爬取梨视频科技栏最热的几个视频。

 1. 找到视频对应的通用标签

可以看出关于视频的信息都存放在li标签中

2. 拿到视频的名称以及对应的url

3.进入Video的url,找到视频信息的地址

你会发现没有这个视频的url,那么说明这个视频可能是动态加载出来的。

4. 打开抓包工具,找到视频对应的包,对其Response进行搜索。

通过搜索,我们发现了视频的url在script标签中,那么我们可以通过正则表达式来获取视频的url

5.思路:找到视频对应的详情页url,在详情页的数据中通过正则获取视频的url.

6.代码编写

import requests
from lxml import etree
import re
from multiprocessing.dummy import Pool def get_video_data(video_data):
"""获取视频文件"""
data = session.get(video_data['url'],headers=headers).content
dic = {'name':video_data['name'],
'data':data}
return dic def write(data):
"""持久化存储"""
with open(data['name']+'.mp4','wb') as f:
f.write(data['data']) url = 'https://www.pearvideo.com/category_8'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36',
'Connection': 'close'
} session = requests.session()
page_text = session.get(url=url, headers=headers).text
tree = etree.HTML(page_text)
li_list = tree.xpath("//ul[@id='listvideoListUl']/li")
video_urls = []
for li in li_list:
src = 'https://www.pearvideo.com/' + li.xpath('./div/a/@href')[0]
name = li.xpath('./div/a/div[2]/text()')[0]
detail_text = session.get(url=src, headers=headers).text
# print(tree_2.xpath('//*[@id= "JprismPlayer"]/video/@src')) 结果为空 说明数据是动态加载
# 在Response中搜索mp4 得到视频对应的链接地址 在script语句中 因为用re
# srcUrl="https://video.pearvideo.com/mp4/third/20200617/cont-1680618-10008579-104906-hd.mp4",vdoUrl=srcUrl
ex = r'srcUrl="(.*?)",vdoUrl=srcUrl'
video_src = re.findall(ex, detail_text)[0]
  # 将视频数据存放在字典中
dic = {
'name': name,
'url': video_src
}
video_urls.append(dic) # 用于获取视频信息
pool = Pool(4)
ret = pool.map(get_video_data, video_urls) # 用于持久化存储
pool_2 = Pool(4)
pool_2.map(write,ret) # 关闭线程池
pool.close()
pool_2.close() # 等待主进程结束
pool.join()
pool_2.join()

(四)基于multiprocessing.dummy线程池爬取梨视频的视频信息的更多相关文章

  1. 基于requests模块的cookie,session和线程池爬取

    目录 基于requests模块的cookie,session和线程池爬取 基于requests模块的cookie操作 基于requests模块的代理操作 基于multiprocessing.dummy ...

  2. Python+Requests+异步线程池爬取视频到本地

    1.本次项目为获取梨视频中的视频,再使用异步线程池下载视频到本地 2.获取视频时,其地址中的Url是会动态变化,不播放时src值为图片的地址,播放时src值为mp4格式 3.查看视频链接是否存在aja ...

  3. 使用requests、BeautifulSoup、线程池爬取艺龙酒店信息并保存到Excel中

    import requests import time, random, csv from fake_useragent import UserAgent from bs4 import Beauti ...

  4. 使用requests、re、BeautifulSoup、线程池爬取携程酒店信息并保存到Excel中

    import requests import json import re import csv import threadpool import time, random from bs4 impo ...

  5. Android 四种常见的线程池

    引入线程池的好处 1)提升性能.创建和消耗对象费时费CPU资源 2)防止内存过度消耗.控制活动线程的数量,防止并发线程过多. 我们来看一下线程池的简单的构造 public ThreadPoolExec ...

  6. 进程池爬取并存入mongodb

    设置进程池爬取拉钩网: # coding = utf- import json import pymongo import pandas as pd import requests from lxml ...

  7. 基于scrapy框架输入关键字爬取有关贴吧帖子

    基于scrapy框架输入关键字爬取有关贴吧帖子 站点分析 首先进入一个贴吧,要想达到输入关键词爬取爬取指定贴吧,必然需要利用搜索引擎 点进看到有四种搜索方式,分别试一次,观察url变化 我们得知: 搜 ...

  8. 第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

    第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ...

  9. 基于webmagic的种子网站爬取

    代码地址如下:http://www.demodashi.com/demo/12175.html 1. 概述 因为无聊,闲来没事做,故突发奇想,爬个种子,顺便学习爬虫.本文将介绍使用Spring/Myb ...

  10. 基于CrawlSpider全栈数据爬取

    CrawlSpider就是爬虫类Spider的一个子类 使用流程 创建一个基于CrawlSpider的一个爬虫文件 :scrapy genspider -t crawl spider_name www ...

随机推荐

  1. 【pytorch学习】之微积分

    4 微积分 在2500年前,古希腊人把一个多边形分成三角形,并把它们的面积相加,才找到计算多边形面积的方法.为了求出曲线形状(比如圆)的面积,古希腊人在这样的形状上刻内接多边形.如图所示,内接多边形的 ...

  2. Java 断言 Assert 使用教程与最佳实践

    本文收录于 Github.com/niumoo/JavaNotes,Java 系列文档,数据结构与算法! 本文收录于网站:https://www.wdbyte.com/,我的公众号:程序猿阿朗 作为一 ...

  3. EasyCV DataHub 提供多领域视觉数据集下载,助力模型生产

    简介: 在人工智能广泛应用的今天,深度学习技术已经在各行各业起到了重要的作用.在计算机视觉领域,深度学习技术在大多数场景已经替代了传统视觉方法.如果说深度学习是一项重要的生产工具,那么数据就是不可或缺 ...

  4. KubeVela + KEDA:为应用带来“与生俱来”的弹性伸缩能力

    简介: 在这篇博文中,我们将简要解释需要考虑的领域,KEDA 如何使应用自动伸缩变得简单,以及为什么阿里云企业分布式应用服务(EDAS)在 KEDA 上完全标准化. 联合作者 | Yan Xun,阿里 ...

  5. dotnet 推荐 LightWorkFlowManager 轻量的工作过程管理库

    本文将和大家推荐我团队开源的 LightWorkFlowManager 轻量的工作过程管理库,适合任何需要执行工作过程的应用逻辑,可以方便将多个工作过程拼凑起来,且自动集成重试和失败处理,以及日志和上 ...

  6. dotnet 6 已知问题 获取 CultureInfo.NumberFormat 可能抛出 IndexOutOfRangeException 异常

    本文记录一个 dotnet 6 已知问题,准确来说这是一个在 dotnet 5 引入的问题,到 dotnet 6.0.12 还没修.在获取 CultureInfo.NumberFormat 属性时,在 ...

  7. k8s证书延长时间(二)

    1.查看证书有效时间 # 通过下面可看到ca证书有效期是10年,2022-2032 [root@master ~]# openssl x509 -in /etc/kubernetes/pki/ca.c ...

  8. 自制一个发送验证码的10秒倒计时js效果

    <template>     <div class="conten1">         <input class="code"  ...

  9. 数据表删除DROP TRUNCATE DELETE区别

    总的来说,DROP 用于删除整个数据库对象(表结构和数据全部删除),DELETE 用于删除表中的数据,而 TRUNCATE 也是删除表中的数据,但比 DELETE 更快,且无法指定条件删除.根据需求, ...

  10. Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目

    Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目 每博一文案 有句谚语说:"一怒之下踢石头,只有痛着脚趾头." 比一件糟糕的事情更可拍的,是你用糟糕的态度 ...