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

 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. SAE助力「海底小纵队学英语」全面拥抱Serverless,节省25%以上成本

    简介: 阿里云Serveless应用引擎SAE 具备免运维IaaS.按需使用.按量计费.低门槛服务应用上云,并且支持多种语言和高弹性能力等特点,刚好完美解决了客户长期以来运维复杂.资源利用率不高.开发 ...

  2. 庖丁解牛|图解 MySQL 8.0 优化器查询转换篇

    ​简介: 本篇介绍子查询.分析表和JOIN的复杂转换过程 一  背景和架构 在<庖丁解牛-图解MySQL 8.0优化器查询解析篇>一文中我们重点介绍了MySQL最新版本8.0.25关于SQ ...

  3. WPF 已知问题 RadioButton 指定 GroupName 后关闭窗口可能导致无法选中

    本文记录一个 WPF 已知问题,当 WPF 的 RadioButton 指定 GroupName 且将 IsChecked 状态绑定到 ViewModel 上,将包含以上控件的代码的窗口显示两个,接着 ...

  4. 修复 GitLab 的 CI Runner 提示找不到 pwsh 执行文件

    本文告诉大家如何修复使用 GitLab 的 Runner 做 CI 时提示 "pwsh": executable file not found in %PATH% 错误 有两个方法 ...

  5. dotnet 使用 XWT 构建跨平台客户端 入门篇

    本文告诉大家如何入门开始开发一个基于 mono 组织开源的 XWT 跨平台客户端 UI 框架的应用,本文的 xwt 是在 GitHub 上完全开源的,基于 MIT 协议的,底层采用 GTK# 的 UI ...

  6. python之Djiango框架简介

    基础 # HTTP响应状态码 10X:服务端已经接受到你的数据了 你可以继续提交数据进行下一步操作 20X:请求成功(200) 30X:重定向(301,302) 40X:请求错误(404) 50X:服 ...

  7. .NET Emit 入门教程:第七部分:实战项目1:将 DbDataReader 转实体

    前言: 经过前面几个部分学习,相信学过的同学已经能够掌握 .NET Emit 这种中间语言,并能使得它来编写一些应用,以提高程序的性能. 随着 IL 指令篇的结束,本系列也已经接近尾声,在这接近结束的 ...

  8. JAVA也能用上Seq啦

    前言 在.NET生态中,Serilog凭借其强大的结构化日志记录功能和与Seq的无缝集成,已经成为许多开发者的首选日志记录工具.Seq作为一个日志检索和仪表板工具,能够将日志中的插值转换为结构化数据, ...

  9. 超级详细的Oracle安装图文详解!手把手教会您从下载到安装!

    首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485532&idx=1 ...

  10. [BZOJ4358]permu线段树+莫队

    先放代码 晚上补(争取) [BZOJ4358]permu 线段树+莫队做法 序列操作,多次询问,无修,标准的莫队. 在如何在不同区间内转移的问题上,我选择用线段树来维护(没听xfg讲回滚莫队不行啊) ...