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

Python爬虫数据分析挖掘

四年编程开发经验,专注于python爬虫、数据分析挖掘、数据可视化、python知识教学,分享日常编程学习和接私活过程。每次推文都『录制讲解视频』手撕代码,关注小白,编程快乐。
45篇原创内容
公众号

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.下载视频到本地。

(0)

相关推荐