查看原文
其他

『异步反爬』别再说自己不会爬取『抖音』视频了!

李运辰 Python研究者 2022-07-01

1

前言


遇到『异步反爬』大家不知道怎么解决!今天就以『抖音』为实战案例,为大家讲解『异步反爬』应该怎么去处理!

同时也教大家怎么去爬取『抖音』视频,看完这篇文章,你以后不要再说:自己不会爬取抖音视频了!


2

准备工作

1.手机端操作

选择其中一个用户(家味美食),进入用户主页,然后点击右上角。


点击分享


复制链接


2.提取链接

提取好的链接如下:

https://v.douyin.com/e8g1kCq/



3

异步分析

1.查看数据包

从上面提取出来的链接是短链接,放到浏览器中运行则变成长链接

- https://v.douyin.com/e8g1kCq/
+ https://www.iesdouyin.com/share/user/77088058644?sec_uid=MS4wLjABAAAAumvAfskbDW1CB77yOudtt4ecmpi3Mkdm8XCkrTfRZPQ&did=70817958123&iid=2463339548275629&app=aweme&utm_campaign=client_share&utm_medium=ios&tt_from=copy&utm_source=copy



找到下面这个数据包

https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAumvAfskbDW1CB77yOudtt4ecmpi3Mkdm8XCkrTfRZPQ&count=21&max_cursor=0&aid=1128&_signature=q3mkJgAAyzVDo4ZbT2T9Cqt5pD&dytk=

2.分析链接


分析链接分析,只有三个参数是需要改变的。

+ sec_uid(用户id)
+ count(返回数)最多是34
+ max_cursor(下一页)

3.获取数据

写代码之前先看一下获取的数据有哪些,将链接放到浏览器里去看一下。

+ has_more 判断是否还有下一页
+ max_cursor 作为获取下一页标志
+ aweme_list 存放视频信息



+ aweme_list列表中,desc是对应视频名称
+ video->play_addr->url_list存放着视频mp4地址


下面开始编程实现

headers = {
        "User-Agent""Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0",
        "Accept""application/json,text/javascript,*/*; q=0.01",
        "Accept-Language""zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
        "Accept-Encoding""gzip,deflate, br",
        "X-Requested-With""XMLHttpRequest",
        'Access-Control-Allow-Origin''*',
        "Connection""keep-alive"
    }
url = "https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid="+str(sec_uid)+"&count="+str(count)+"&max_cursor="+str(max_cursor)+"&aid=1128&_signature=z1epBAAArxEnjYt5fPWXJs9XqR&dytk="
r = requests.get(url, headers=headers)
r.encoding = 'utf-8'
da = json.loads(r.text)
aweme_list  = da['aweme_list']
has_more = da['has_more']

for i in aweme_list:
    title = i['desc']
    video_url = i['video']['play_addr']['url_list'][0]
    print(title)
    print(video_url)



4.下载视频到本地

###下载视频
def down(name,url):
    headers_down = {
        'user-agent''Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36',

    }
    r = requests.get(url,headers=headers_down)
    with open("lyc/"+str(name)+".mp4"'wb+'as f:
        f.write(r.content)


定义了一个下载视频的函数,视频最终保存到lyc文件夹中。




4

获取下一页链接

1.下载视频到本地

获取当前页请求返回的max_cursor,替换当前页的max_cursor。



while(has_more):
      url = "https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid="+str(sec_uid)+"&count="+str(count)+"&max_cursor="+str(max_cursor)+"&aid=1128&_signature=z1epBAAArxEnjYt5fPWXJs9XqR&dytk="
      r = requests.get(url, headers=headers)
      r.encoding = 'utf-8'
      da = json.loads(r.text)
      aweme_list  = da['aweme_list']
      has_more = da['has_more']

      for i in aweme_list:
          title = i['desc']
          video_url = i['video']['play_addr']['url_list'][0]
          videotitle_list.append(title)
          down(title,video_url)
          print(title+"-下载完成!")
          videotitle_list = list(set(videotitle_list))
          print(len(videotitle_list))

          if has_more:
              max_cursor = da['max_cursor']
          else:
              break


5

总结

1.获取抖音视频名称和真实mp4播放地址,解决『异步反爬』 问题。

2.解析下一页链接。

3.下载视频到本地。


如果大家对本文代码源码感兴趣,扫码关注『Python爬虫数据分析挖掘』后台回复:抖音视频 ,获取完整代码!


本文代码讲解视频!

本文手撕代码过程

------------- 推荐阅读 -------------


往期精彩

1.python实战破解『梨视频』反爬机制,轻松实现批量视频下载!


2.爬取3w条『各种品牌』笔记本电脑数据,统计分析并进行可视化展示!真好看~


3.教你用python爬取『京东』商品数据,原来这么简单!

爬虫入门篇

1.今天只分享python、爬虫入门级学习资料

爬虫框架篇

1.以『B站』为实战案例!手把手教你掌握爬虫必备框架『Scrapy』

2.爬取1907条『课程学习』数据,分析哪类学习资源最受大学生青睐1

爬虫反爬篇

1.爬虫遇到反爬机制怎么办? 看看我是如何解决的!


2.python实战破解『梨视频』反爬机制,轻松实现批量视频下载!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存