最近折腾的少了,实在没的写了,大约三四个月没更新了,先水一篇。
这个是看了吾爱之后了解的,原来是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