抖音主页视频抓取

抖音主页视频抓取

月光魔力鸭

2022-09-22 19:59 阅读 1070 喜欢 2 抖音 爬虫

最近折腾的少了,实在没的写了,大约三四个月没更新了,先水一篇。

这个是看了吾爱之后了解的,原来是python写的,这里换了js .

没啥说的,直接上代码。根据主页url地址,抓取对应的主页的视频并进行下载。 地址是从抖音官网上拿到的。

import got from 'got'
import path from 'path'
import fs from 'fs'

let download = async function(url){
  let urlparams = new URL(url);
  let pathname = urlparams.pathname;
  let userId = path.basename(pathname);

  let headers = {
    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
  };

  //获取列表
  let api = `https://m.douyin.com/web/api/v2/aweme/post/?reflow_source=reflow_page&sec_uid=${userId}&count=21&max_cursor=0`;
  let list = await got(api, { headers: headers }).json();

  for (let rec of list.aweme_list) {
    let downurl = rec.video.play_addr.url_list[0];
    let authorname = rec.author.nickname;
    authorname = authorname.split('').filter(t => {
        return /^([\u4E00-\u9FA5A-Za-z0-9\uFF0E](?!\u3000))+$/.test(t);
    }).join('');

    let videoname = rec.desc;
    videoname = videoname.split('').filter(t => {
        return /^([\u4E00-\u9FA5A-Za-z0-9\uFF0E](?!\u3000))+$/.test(t);
    }).join('');
    videoname = videoname||rec.aweme_id;
    if (!fs.existsSync('./'+authorname)) {
      fs.mkdirSync('./' + authorname);
    }
    let filePath = './' + authorname + '/' + videoname + '.mp4';
    if (!fs.existsSync(filePath)) {
      let res = await got(downurl, {
        method: 'GET',
        responseType: 'buffer',
        headers: headers,
        http2: true
      });
      fs.writeFileSync(filePath, res.body);
      console.log(filePath);
    }
  }

  return true;
}
export default download;

中间由于名字和描述有一些符号之类的,简单做了下处理。而且抖音是http2的协议,got支持,之前常用的axios不太行了。

没有做循环,只做了第一页,有时间做个小界面出个工具玩。

转载请注明出处: https://chrunlee.cn/article/douyin-video-spider.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
在我们web开发过程中经常会碰到针对table的一些dom操作,这里整理一下关于这方面的知识点。当然我们可以通过jquery这样的插件来处理,或许会更简单一些,不过现在简单说下原生JS是如何操作的
在文件上传的时候,经常会对文件的mime进行限制,比如图片 image/jpg 等,让用户可以选择图片,而不是其他的文件。
在开发过程中经常会碰到跨frame 去操作的需求,那么如何获得这个frame呢,这里写了一个工具类,用来通过name获得frame的jq对象
本文概括了递归、闭包、原型、继承,理清这些基本的概念,有助于你接纳更多的东西,我们会在下一个章节对函数进行更深入的讨论。
之前一直没面试过前端,今天有一个,先整理下需要问的问题和答案。这里都是一些简单的问题,关于当下比较流行的框架并没有涉及到..
在页面中不同的frame之间进行相互调用的话,我们可以通过frame获取对应的window然后进行调用,但是如果是浏览器不同的tab之间呢?
之前的时候都是在各大主机厂商手动进行申请免费的,直到阿里的免费期限变更为3个月.. 我就开始觉的有些麻烦了,还不如使用这个let's encrypt进行部署呢。
关于jquery,他的核心特点就是无new构造和链式调用,这里根据网上的资料,自己简单理解下,有助于消化核心代码。