node爬虫,批量爬取头条视频并保存(代码片段)

hzj680539 hzj680539     2023-01-01     156

关键词:

项目地址:GitHub

目标网站:西瓜视频
项目功能:下载头条号【维辰财经】下的最新20个视频
姊妹项目:批量下载美女图集

简介

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

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

今日头条里有很多有意思的头条号玩家,他们发布了很多视频在里面。如果大家有批量下载某个头条号视频的需求,这个爬虫就派上用场了。当然,其他视频站也都大同小异,更改下部分代码设置就可以使用啦。

项目启动

命令

npm i
npm start
// 安装 puppeteer 的过程稍慢,耐心等待。

单个文件下载命令

npm run single
// 在文件 single.js 中设置视频名称和 src 即可。

配置文件

// 配置相关
module.exports =  
  originPath: ‘https://www.ixigua.com‘, // 页面请求地址
  savePath: ‘D:/videoZZ‘ // 存放路径
// 单个视频下载设置
const folderName = ‘D:/videoLOL‘
const fileName = ‘S8预选赛TOP5:Haro李青无解操作支配战局「LOL七周年」‘
const videoSrc = ‘http://v11-tt.ixigua.com/e2b7cbd320031f6c19890001503a6ca0/5b9fd7bb/video/m/2203ce04dd18e0e426381abfe64ea44f19b115bbe0a000027c1f6e94a77/‘

// 初始化方法
const start = async () => 
  method.mkdirSaveFolder(folderName)
  let video = 
    src: videoSrc,
    title: fileName
  
  downloadVideo(video)

技术点

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

代码示例

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();
)();

视频文件下载方法

  • 下载视频主方法
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`)
  
  • 获取视频数据
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()
  )
  • 将视频数据保存到本地
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(‘已下载‘)
    )
  )

爬取结果截图

技术分享图片

说明

此爬虫仅用于个人学习,如果侵权,即刻删除!

 

项目地址:GitHub

 



java爬虫爬取b站视频分享iframe代码并保存10000条数据到数据库(代码片段)

需求:自己开发的一个视频网站不想把自己上传视频和封面图片,因为一个一个上传视频文件和封面图片还是很费时间的,想着直接抓取点b站上的视频iframe分享的链接和图片链接到我的数据库中,这样网站就很快... 查看详情

递归爬取今日头条指定用户一个月内发表的所有文章,视频,微头条(代码片段)

最近找工作,爬虫面试的一个面试题。涉及的反爬还是比较全面的,结果公司要求高,要解决视频链接时效性问题,凉凉。直接上代码importrequestsimporttimefromdatetimeimportdatetimeimportjsonimportexecjsimporthashlibimportreimportcsvfromzlibimportcrc32fr... 查看详情

python爬虫之selenium+beautifulsoup库,爬取搜索内容并保存excel(代码片段)

...使用,及浏览器提取信息相关方法。参考:python爬虫之selenium库现在目标要求,用爬虫通过浏览器,搜索关键词,将搜索到的视频信息存储在excel表中。二、创建excel表格,以及chrome驱动n=1word=input('... 查看详情

python爬虫(爬取视频)(代码片段)

爬虫爬视频爬取步骤第一步:获取视频所在的网页第二步:F12中找到视频真正所在的链接第三步:获取链接并转换成机械语言第四部:保存代码importreimportrequestsresponse=requests.get('https://vd4.bdstatic.com/mda-jcrx64vi5vct2d2u/sc/mda-jcrx64vi5... 查看详情

python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中(代码片段)

Python爬虫:爬取知乎上的视频,并把下载链接保存到md文件中1.需要的Python模块主要是requests模块,用于得到的网页的数据安装命令为:pipinstallrequests2.具体实现过程以爬取王者荣耀这个知乎站点上的视频为例。我们首先来到... 查看详情

python爬虫之selenium+beautifulsoup库,爬取搜索内容并保存excel(代码片段)

...使用,及浏览器提取信息相关方法。参考:python爬虫之selenium库现在目标要求,用爬虫通过浏览器,搜索关键词,将搜索到的视频信息存储在excel表中。二、创建excel表格,以及chrome驱动n=1word=input('... 查看详情

爬虫---获取图片并处理中文乱码(代码片段)

爬取网站图片运用requests模块处理url并获取数据,etree中xpath方法解析页面标签,urllib模块urlretrieve保存图片,"iso-8859-1"处理中文乱码 #爬取图片并且处理乱码importrequestsfromlxmlimportetree#urlretrieve可以直接保存图片fromurllibimportrequesturl=... 查看详情

批量爬取网站上的文本和图片,并保存至word中(代码片段)

 1frompyqueryimportPyQueryaspq2importrequestsasrs3fromdocximportDocument4fromdocx.sharedimportRGBColor567html=‘‘‘8https://zhs.moo0.com/software/AudioTypeConverter/pad.xml9https://zhs.moo0.com/sof 查看详情

python爬虫之爬取b站首页热门推荐视频(代码片段)

文章目录前言原理一.首先先找出推荐视频栏所在位置并找到各个视频的url二.找到音频相关标签和url三.进行UI伪装四.音视频合并完整代码运行结果前言众所周知,b站上有很多视频资源,非常诱人,但是这些视频又不... 查看详情

scrapy爬虫系列之三--爬取图片保存到本地及日志的基本用法(代码片段)

功能点:如何爬取图片,并保存到本地爬取网站:斗鱼主播完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip主要代码:douyu.pyimportscrapyimportjsonfromDouyu.itemsimportDouyuItemclassDouyuSpider(scrapy.Spider):name=‘douyu‘allowed_dom 查看详情

python爬虫自动爬取图片并保存(代码片段)

一、准备工作 用python来实现对图片网站的爬取并保存,以情绪图片为例,搜索可得到下图所示f12打开源码在此处可以看到这次我们要爬取的图片的基本信息是在img-scr中二、代码实现这次的爬取主要用了如下的第三方库im... 查看详情

python爬虫教你爬取视频信息(代码片段)

大家好,我是拉斯,今天分享一个爬取某音视频的一个小案例,大家一起学习目录前言基本环境配置爬取目标视频获取视频链接1.查看网页源代码2.抓包工具捕捉下载视频(以mp4格式进行保存)获取其他信息并打印(作者... 查看详情

爬虫:爬取图片并保存在某路径下(代码片段)

importreimporturllib.requestdefgetHtml(url):page=urllib.request.urlopen(url)html=page.read()returnhtmldefgetImg(html):reg=r‘src="([.*S]*.jpg)"‘imgre=re.compile(reg)imglist=re.findall(imgre,html)returnimglisthtml=getHtml("http://www.win4000.com/zt/gaoqing.html")html=html.decode("utf-8")#print(1,h... 查看详情

用python爬取基金网信息数据,保存到表格,并做成四种简单可视化。(爬虫之路,永无止境!)(代码片段)

...据,保存到表格,并做成四种简单可视化。(爬虫之路,永无止境!)上次2021-07-07写的用python爬取腾讯招聘网岗位信息保存到表格,并做成简单可视化。有的人留言问我:可以作为模板么?我... 查看详情

爬虫系列3:requests+xpath爬取租房网站信息并保存本地(代码片段)

数据保存本地 参考前文爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html参考前文爬虫系列2:https://www.cnblogs.com/yizhiamumu/p/10267721.html 小猪短租是一个租房网站,上面有很多优质的民宿出租信息,下面我们以成都地区的租... 查看详情

python爬虫实战:爬取并下载csdn文章(代码片段)

目录1.获取文章对应的标签2.下载页面3.提取标题和正文部分4.提取CSS样式5.保存网页6.总结1.获取文章对应的标签在文章内容上右击->检查,找到了<article>标签,该标签的内容就是文章的正文部分。2.下载页面使用requests库的get... 查看详情

爬虫(猫眼电影+校花网+github+今日头条+拉钩)(代码片段)

 Requests+正则表达式爬取猫眼TOP100榜电影信息MARK:将信息写入文件解决乱码方法,开启进程池秒爬。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051import requestsfrom requests.except 查看详情

新手的node爬虫初体验(代码片段)

原文博客:羞羞的node爬虫前言学了一阵子node,除了用express写东西,就没怎么做过东西突然就想写个爬虫来玩一玩,而且还是爬一些羞羞的东西使用模块SuperAgent是个http方面的库,可以发起get或post请求。cheerio大家可以理解成一... 查看详情