Node批量爬取头条视频并保存方法

简介

一般批量爬取视频或者图片的套路是,使用爬虫获得文件链接集合,然后通过 writeFile 等方法逐个保存文件。然而,头条的视频,在需要爬取的 html 文件(服务端渲染输出)中,无法捕捉视频链接。视频链接是页面在客户端渲染时,通过某些 js 文件内的算法或者解密方法,根据视频的已知 key 或者 hash 值,动态计算出来并添加到 video 标签的。这也是网站的一种反爬措施。

我们在浏览这些页面时,通过审核元素,可以看到计算后的文件地址。然而在批量下载时,逐个手动的获取视频链接显然不可取。开心的是,puppeteer 提供了模拟访问 Chrome 的功能,使我们可以爬取经过浏览器渲染出来的最终页面。

项目启动

命令

?


1

2

npm i

npm start

Notice: 安装 puppeteer 的过程稍慢,耐心等待。

配置文件

?


1

2

3

4

5

// 配置相关

module.exports = {

 originPath: https://www.ixigua.com, // 页面请求地址

 savePath: ‘D:/videoZZ‘ // 存放路径

}

技术点

puppeteer

官方API

puppeteer 提供一个高级 API 来控制 Chrome 或者 Chromium。

puppeteer 主要作用:

利用网页生成 PDF、图片

爬取SPA应用,并生成预渲染内容(即“SSR” 服务端渲染)

可以从网站抓取内容

自动化表单提交、UI测试、键盘输入等

使用到的 API:

puppeteer.launch() 启动浏览器实例

browser.newPage() 创建一个新页面

page.goto() 进入指定网页

page.screenshot() 截图

page.waitFor() 页面等待,可以是时间、某个元素、某个函数

page.$eval() 获取一个指定元素,相当于 document.querySelector

page.$$eval() 获取某类元素,相当于 document.querySelectorAll

page.$(‘#id .className‘) 获取文档中的某个元素,操作类似jQuery

代码示例

?


1

2

3

4

5

6

7

8

9

10

const puppeteer = require(‘puppeteer‘);

 

(async () => {

 const browser = await puppeteer.launch();

 const page = await browser.newPage();

 await page.goto(https://example.com);

 await page.screenshot({path: ‘example.png‘});

 

 await browser.close();

})();

视频文件下载方法

下载视频主方法

?


1

2

3

4

5

6

7

8

9

10

11

12

13

const downloadVideo = async video => {

 // 判断视频文件是否已经下载

 if (!fs.existsSync(`${config.savePath}/${video.title}.mp4`)) {

 await getVideoData(video.src, ‘binary‘).then(fileData => {

  console.log(‘下载视频中:‘, video.title)

  savefileToPath(video.title, fileData).then(res =>

  console.log(`${res}: ${video.title}`)

  )

 })

 } else {

 console.log(`视频文件已存在:${video.title}`)

 }

}

获取视频数据

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

getVideoData (url, encoding) {

 return new Promise((resolve, reject) => {

 let req = http.get(url, function (res) {

  let result = ‘‘

  encoding && res.setEncoding(encoding)

  res.on(‘data‘, function (d) {

  result += d

  })

  res.on(‘end‘, function () {

  resolve(result)

  })

  res.on(‘error‘, function (e) {

  reject(e)

  })

 })

 req.end()

 })

}

将视频数据保存到本地

?


1

2

3

4

5

6

7

8

9

10

11

savefileToPath (fileName, fileData) {

 let fileFullName = `${config.savePath}/${fileName}.mp4`

 return new Promise((resolve, reject) => {

 fs.writeFile(fileFullName, fileData, ‘binary‘, function (err) {

  if (err) {

  console.log(‘savefileToPath error:‘, err)

  }

  resolve(‘已下载‘)

 })

 })

}

金盾2016-2017逆向分析系列教程   下载地址:百度网盘下载
2017AI人工智能时代基础实战python机器学习深度学习算法全套视频教程   下载地址:百度网盘下载
2016年练数成金最新python数据分析15周视频教程附源码/案例   下载地址:百度网盘下载
实战Python Django开发博客系统   下载地址:百度网盘下载
2018Python Flask打造一个视频网站实战视频教程   下载地址:百度网盘下载
Python.Django 13集 视频教程 教学视频   下载地址:百度网盘下载
2017AI人工智能基础实战python机器深度学习算法视频教程   下载地址:百度网盘下载
Python网络爬虫Scrapy+MongoDB +Redis实战爬取腾讯视频动态评论教学视频   下载地址:百度网盘下载
2018某课网Java秒杀高性能高并发实战视频教程   下载地址:百度网盘下载
首套 Spring、SpringMVC、JPA、SpringData 整合案例视频   下载地址:百度网盘下载
价值上万基于SOA 思想下的WebService多层架构实战用户管理系统   下载地址:百度网盘下载
2017最新达内JAVA培训视频教程33G   下载地址:百度网盘下载
某课网高价Java大数据教程 Storm打造实时热力分步综合项目实战视频教程 Storm视频教程   下载地址:百度网盘下载
黑马程序员Java视频教程大全 压缩之后22G 带全套学习资料   下载地址:百度网盘下载
Redis 教程+redis微博设计处理(内涵笔记和源码)   下载地址:百度网盘下载
传智播客35期JAVA 基础+就业 (含税务系统项目)   下载地址:百度网盘下载
Git零基础到深入学习视频教程 Git极速入门课程 极客学院14集Git基础学习视频教程   下载地址:百度网盘下载
基于Laravel+VueJS实战开发WebAPP   下载地址:百度网盘下载
php微信接口开发实战项目 聊天机器人+微信支付   下载地址:百度网盘下载
php 项目开发实录全场记录   下载地址:百度网盘下载

原文地址:https://www.cnblogs.com/voleta/p/9853629.html

时间: 2024-08-30 06:33:06

Node批量爬取头条视频并保存方法的相关文章

Node 爬虫,批量爬取头条视频并保存

项目地址:GitHub 目标网站:西瓜视频项目功能:下载头条号[维辰财经]下的最新20个视频姊妹项目:批量下载美女图集 简介 一般批量爬取视频或者图片的套路是,使用爬虫获得文件链接集合,然后通过 writeFile 等方法逐个保存文件.然而,头条的视频,在需要爬取的 html 文件(服务端渲染输出)中,无法捕捉视频链接.视频链接是页面在客户端渲染时,通过某些 js 文件内的算法或者解密方法,根据视频的已知 key 或者 hash 值,动态计算出来并添加到 video 标签的.这也是网站的一种反爬

Python爬虫学习教程,批量爬取下载抖音视频

这篇文章主要为大家详细介绍了python批量爬取下载抖音视频,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 这篇文章主要为大家详细介绍了python批量爬取下载抖音视频,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 这篇文章主要为大家详细介绍了python批量爬取下载抖音视频,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 项目源码展示: 1 ''' 2 在学习过程中有什么不懂得可以加我的 3 python学习交流扣扣qun,934109170 4 群里有不错的学习教程.开发工具与电子

爬虫新手学习2-爬虫进阶(urllib和urllib2 的区别、url转码、爬虫GET提交实例、批量爬取贴吧数据、fidder软件安装、有道翻译POST实例、豆瓣ajax数据获取)

爬虫新手学习1-爬虫基础 1.urllib和urllib2区别实例 urllib和urllib2都是接受URL请求相关模块,但是提供了不同的功能,两个最显著的不同如下: urllib可以接受URL,不能创建设置headers的Request类实例,urlib2可以. url转码 https://www.baidu.com/s?wd=%E5%AD%A6%E7%A5%9E python字符集解码加码过程: 2.爬虫GET提交实例 #coding:utf-8 import urllib #负责url编

Node实战-----爬取网页图片

在本篇博文中我将实现一个完整的实例:主要使用Node.js爬取一个网页,需要通过第三方模块cheerio.js分析这个网页的内容,最后将这个网页的图片保存个在本地. 一.项目目录与思路 新建一个项目名为:project_01,输入命令在控制台,使其生成package.json文件: 命令: npm init 在控制台输入npm install命令下载需要的模块,在本项目中需要的request和cheerio模块,将使用命令进行下载到本地: 命令: npm install request chee

requests爬取梨视频主页所有视频

爬取梨视频步骤: 1.爬取梨视频主页,获取主页所有的详情页链接 - url: https://www.pearvideo.com/ - 1) 往url发送请求,获取主页的html文本 - 2) 解析并提取详情页相对路径video_1637593,与主页拼接即可 - 拼接后获取的是电影详情页url: - detail_url: https://www.pearvideo.com/ + video_1637593 2.往电影详情页发送请求,解析并提取真实视频url--> .mp4后缀的视频url -

爬取梨视频主页所有视频

import requests import re import uuid from concurrent.futures import ThreadPoolExecutor pool = ThreadPoolExecutor(50) # 爬虫三部曲 # 1.发送请求 def get_html(url): print(f'start: {url}...') response = requests.get(url) return response # 2.解析数据 # 解析主页,获取视频详情页ur

利用nas或者vps爬取91视频

前些日子闲逛知乎想找一找黑群晖还能进行什么高级应用,看见某匿名答主写的爬取91视频的代码.嗯--小研究了下,确实很不错.但是答主并没有详细介绍如何使用,对于小白有些摸不到头脑.自己研究了一下配置还算简单,介绍下使用教程.需要一台能访问该网站的VPS或者nas,不能的话那就需要富强上网了.自己写了个各VPS的比较及推荐,仅供参考.以下以操作系统以ubuntu16.04为例.首先使用xshell连接到你自己的nas或者vps.1.更新ap-getapt-get update2.安装phpapt-ge

python爬取小视频,看完身体一天不如一天!

Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以在这里给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,都放在了文章结尾,欢迎前来领取!python爬取小视频记录学习python简单爬虫小程序,记录代码和学习过程环境信息python 2.7.12分析与步骤 要分析网站信息 http://www.budejie.com/video/ 查看网页不同页面的信息http://www.budejie.com/video/2http://www.budejie.

Python爬取网页的三种方法

# Python爬取网页的三种方法之一:  使用urllib或者urllib2模块的getparam方法 import urllib fopen1 = urllib.urlopen('http://www.baidu.com').info() fopen2 = urllib2.urlopen('http://www.sina.com').info() print fopen1.getparam('charset') print fopen2.getparam('charset') #----有些