菜鸡源码,专注精品下载!
当前位置:首页 > 建站教程 > 建站知识

使用Python爬虫下载抖音用户所有短视频的无水印方法

发布时间:2024-01-05  栏目:建站知识   浏览:   分类:python教程 python爬虫 Python抓取

要下载抖音用户的所有短视频,可以使用Python爬虫。首先,需要安装`requests`和`beautifulsoup4`库。然后,通过分析抖音网页版的请求,找到视频的URL。接着,使用`requests`库下载视频,并使用`ffmpeg`去除水印。最后,将处理后的视频保存到本地。 需要注意的是,抖音可能会对爬虫进行反爬措施,因此可能需要使用代理IP或者设置请求头来绕过这些限制。此外,频繁下载视频可能会导致账号被封禁。

这次分享下载抖音用户所有短视频方法,python爬虫批量抓取,无水印下载,希望和大家多多交流互相学习!

获取用户链接方法

1、首先在抖音上随机挑选一个小姐姐,用户主页右上角点开,获取分享链接

python爬虫下载抖音用户所有短视频+无水印方法
python下载抖音视频截图

得到类似分享链接:在抖音,记录美好生活! https://v.douyin.com/eSN7g1c/

批量下载无水印视频

1.获取用户抖音昵称,并创建同名文件夹存放视频

2.校验用户所有时间段是否发布过视频,校验数量为0则跳过,不为0则进行下载

3.下载并保存,数量和用户主页视频数量一致

4.验证一下,确实无水印,Bingo!

python程序思路分享

1.根据用户页面分享的链接提取url2.根据url来进行请求,通过禁用重定向来获取headers['location'],再从中提取sec_id

3.拼接该用户所有视频列表请求url,然后在下载保存即可。下面给出一个请求参数示例:params = {

'sec_uid':'MS4wLjABAAAAbtSlJK_BfUcuqyy8ypNouqEH7outUXePTYEcAIpY9rk',#每个用户不同'count':'200',#每次请求返回视频list中视频条数,不建议太大'min_cursor':'1612108800000',#用户视频开始时间,带毫秒的时间戳'max_cursor':'1619251716404',#用户视频结束时间,带毫秒时间戳'aid':'1128',#未知参数,可有可无'_signature':'PtCNCgAAXljWCq93QOKsFT7QjR'#签名值,直接从请求参数里面复制一个就能一直用}

关键代码:

1.提取分享链接中的url

string=input('粘贴分享链接:')shroturl=re.findall('[a-z]+://[S]+',string,re.I|re.M)[0]

2.请求上述url,禁用重定向获取location的value,在正则提取出sec_id

startpage=requests.get(url=shroturl,headers=headers,allow_redirects=False)location=startpage.headers['location']sec_uid=re.findall('(?<=sec_uid=)[a-z,A-Z,0-9,_,-]+',location,re.M|re.I)[0]

3.拼接请求用户信息url,获取用户昵称,也可以获取其他信息,这里只取昵称

getname=requests.get(url='https://www.iesdouyin.com/web/api/v2/user/info/?sec_uid={}'.format(sec_uid),headers=headers).textuserinfo=json.loads(getname)name=userinfo['user_info']['nickname']

4.创建用户昵称同名文件夹,切换到该路径下

Path=nameifos.path.exists(path=Path)==False:os.mkdir(path=Path)else:print('directoryexist')os.chdir(path=Path)

5.视频时间戳生成,原本可以直接使用一个大跨度的时间段,但是在测试中发现时间跨度太大的话,下载的视频数量会变少,多次测试后确定以1个月为间隔,年份从2018到2021,基本上也没有更早的视频了吧

year=('2018','2019','2020','2021')month=('01','02','03','04','05','06','07','08','09','10','11','12')timepool=[x+'-'+y+'-0100:00:00'forxinyearforyinmonth]print(timepool)k=len(timepool)foriinrange(k):ifi<k-1:print('begintime='+timepool[i])print('endtime='+timepool[i+1])beginarray=time.strptime(timepool[i],"%Y-%m-%d%H:%M:%S")endarray=time.strptime(timepool[i+1],"%Y-%m-%d%H:%M:%S")t1=int(time.mktime(beginarray)*1000)t2=int(time.mktime(endarray)*1000)print(t1,t2)

6.到这里,params里面的参数都拿到了,直接拼接视频列表url,把返回结果存入JSON中。

awemeurl='https://www.iesdouyin.com/web/api/v2/aweme/post/?'awemehtml=requests.get(url=awemeurl,params=params,headers=headers).textdata=json.loads(awemehtml)

7.直接从json中提取我们要的内容{“视频数量”,“视频title”,“无水印视频url”},然后还等啥,下载吧

awemenum=len(data['aweme_list'])print(awemenum)foriinrange(awemenum):videotitle=data['aweme_list'][i]['desc'].replace("?","").replace(""","").replace(":","")videourl=data['aweme_list'][i]['video']['play_addr']['url_list'][0]start=time.time()print('{}===>downloading'.format(videotitle))withopen(videotitle+'.mp4','wb')asv:try:v.write(requests.get(url=videourl,headers=headers).content)end=time.time()cost=end-startprint('{}===>downloaded===>cost{}s'.format(videotitle,cost))exceptExceptionase:print('downloaderror')

Python完整代码分享

importrequestsimportjsonimportosimporttimeimportre"""1.根据用户页面分享的字符串提取短url2.根据短url加上302获取location,提取sec_id3.拼接视频列表请求urlparams={'sec_uid':'MS4wLjABAAAAbtSlJK_BfUcuqyy8ypNouqEH7outUXePTYEcAIpY9rk','count':'200','min_cursor':'1612108800000','max_cursor':'1619251716404','aid':'1128','_signature':'PtCNCgAAXljWCq93QOKsFT7QjR'}"""headers={"user-agent":"Mozilla/5.0(Linux;Android6.0;Nexus5Build/MRA58N)AppleWebKit/537.36(KHTML,likeGecko)Chrome/89.0.4389.114MobileSafari/537.36"}#string='在抖音,记录美好生活!https://v.douyin.com/ekkTsYw/'string=input('粘贴分享链接:')shroturl=re.findall('[a-z]+://[S]+',string,re.I|re.M)[0]print(shroturl)startpage=requests.get(url=shroturl,headers=headers,allow_redirects=False)location=startpage.headers['location']sec_uid=re.findall('(?<=sec_uid=)[a-z,A-Z,0-9,_,-]+',location,re.M|re.I)[0]getname=requests.get(url='https://www.iesdouyin.com/web/api/v2/user/info/?sec_uid={}'.format(sec_uid),headers=headers).textuserinfo=json.loads(getname)name=userinfo['user_info']['nickname']print(userinfo['user_info']['nickname'])Path=nameifos.path.exists(path=Path)==False:os.mkdir(path=Path)else:print('directoryexist')os.chdir(path=Path)"""newfunction"""year=('2018','2019','2020','2021')month=('01','02','03','04','05','06','07','08','09','10','11','12')timepool=[x+'-'+y+'-0100:00:00'forxinyearforyinmonth]print(timepool)k=len(timepool)foriinrange(k):ifi<k-1:print('begintime='+timepool[i])print('endtime='+timepool[i+1])beginarray=time.strptime(timepool[i],"%Y-%m-%d%H:%M:%S")endarray=time.strptime(timepool[i+1],"%Y-%m-%d%H:%M:%S")t1=int(time.mktime(beginarray)*1000)t2=int(time.mktime(endarray)*1000)print(t1,t2)params={'sec_uid':sec_uid,'count':200,'min_cursor':t1,'max_cursor':t2,'aid':1128,'_signature':'PtCNCgAAXljWCq93QOKsFT7QjR'}awemeurl='https://www.iesdouyin.com/web/api/v2/aweme/post/?'awemehtml=requests.get(url=awemeurl,params=params,headers=headers).textdata=json.loads(awemehtml)#print(data)#print(type(data))awemenum=len(data['aweme_list'])print(awemenum)foriinrange(awemenum):videotitle=data['aweme_list'][i]['desc'].replace("?","").replace(""","").replace(":","")videourl=data['aweme_list'][i]['video']['play_addr']['url_list'][0]start=time.time()print('{}===>downloading'.format(videotitle))withopen(videotitle+'.mp4','wb')asv:try:v.write(requests.get(url=videourl,headers=headers).content)end=time.time()cost=end-startprint('{}===>downloaded===>cost{}s'.format(videotitle,cost))exceptExceptionase:print('downloaderror')


相关专题

相关文章

    无相关信息
评论
建站知识
建站知识
使用技巧
调试安装
运营推广