抖音主页视频抓取

抖音主页视频抓取

月光魔力鸭

2022-09-22 19:59 阅读 1200 喜欢 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


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
Question from codewar,about all of array combinations.
通过修改数据库编码处理存储emoj表情导致的报错问题。
当一些业务必须通过横屏来实现,但是又没有原生来做,只能通过h5的时候怎么办?
突然来了一个调研任务,想要实现一个类似3D虚拟展厅类似的需求,主要就是放一些学生的作品,然后预览啥的,效果还是要全景的效果。 经过一番调查,最终锁定了以前从未接触过的krpano。
在项目开发过程中,分页是少不了的,之前封装了一个分页组件,样式是基于bootstrap的样式,当然也可以自己来修改
我们有时候会拿textarea来做编辑器,但是常用编辑器都是支持tab缩进的,这里对textarea监听下事件处理下即可实现。
偶尔练习下canvas,这里简单记录下常用API,防止遗忘..加深记忆..努力提高..争取突破...daydayup
在通过chrome浏览器来调用摄像头的时候发现getUserMedia报错,但是本地开发却没有问题,主要原因是https环境的问题。chrome 不允许在非https和非localhost下的非安全环境进行调用。