python分析并爬取今日头条的视频链接

如题,分析并爬取今日头条的视频链接

代码仅供交流使用

一.分析

1.进入现在的官网http://www.365yg.com/,然后通过抓包发现首页数据的走向,一般来说首页数据放在网页中,要不然就是用json返回的。

可以发现并没有看到任何首页的数据,就剩下在json了

通过开发者工具的筛选xhr数据,然后发现返回这两条链接,第一条被排除了,就只剩下第二条链接,看到返回内容,发现其中data中的id跟首页视频跳转的id并不对应,再分析其他几个,发现是时间戳,最后只有raw_data没有显示任何内容,看完整个数据可以推断是base64加密,解密看了下,发现所需要的数据在这里面。

 

2.再上面的内容中并没有得到相应的视频链接,就只能去视频里面找呢

随便点击首页的一个视频进入,然后打开开发者工具进行抓包,还是一样,无法在网页中找到,就进行筛选xhr链接

从这么多数据里面发现只有两个数据能有返回包,而这两个包通过返回数据发现都能提取到视频的链接,而且是不同清晰度的:

第一条链接,发现了其中包含packjson的数据,里面就能提取到链接。

第二条链接,显示了不同的清晰度和进行base64加密的链接,但是这条提取的链接,需要参数的提交,其中的Authorization在提交的协议头中,还有video_id,还有附带的token。

这些参数在第1步的分析中能提取到,提取后通过组成完整的链接进行提取即可

二.代码

通过上面的分析链接,可以得到代码如下:

import requests
from base64 import b64decode
import json


def get_url(num):
    headers = {
    "User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"
    }
    res = requests.post(f'http://www.365yg.com/xigua/feed/?ChannelID=6797027941&Count={num}&UseHQ=true',
                        headers=headers,
                        allow_redirects=False).json()
    data_list = []
    base_list = res['Data']
    for base in base_list:
        base = base['raw_data']
        raw = b64decode(base).decode()
        raw = json.loads(raw)
        title = raw['title']
        group_id = raw['group_id']
        video_id = raw['video_id']
        token = raw['play_biz_token']
        auth_token = raw['play_auth_token']
        #第一种,通过group_id提取视频的链接

        # res = requests.post(f'http://www.365yg.com/xigua/play/?GroupID={group_id}', headers=headers,
        #                     allow_redirects=False).json()
        # video_list = json.loads(res['InformationResponse']['Info']['PackedJson'])['video_play_info']
        # video_list = json.loads(video_list)['video_list']

        #第二种,通过提取video_id和两个token,提取视频链接

        url = f'http://vas.snssdk.com/video/openapi/v1/?format_type=dash&action=GetPlayInfo&video_id={video_id}&nobase64=false&ptoken={token}&vfrom=xgplayer'
        headers.update({'Authorization': auth_token})
        res = requests.get(url, headers=headers).json()

        #这下面的提取是两种方法通用
        try:
            video_list = res['data']['dynamic_video']['dynamic_video_list']
            # print("dv_list", video_list)
            for video in video_list:
                video_type = video['definition']
                video_url = b64decode(video['main_url']).decode()
                # print(title + ':' + video_type + '|' + video_url)
                data = title, video_type, video_url
                data_list.append(data)
        except TypeError:
            video_list = res['data']['video_list']
            # print("v_list", video_list)
            for i in range(1, 5):
                try:
                    video_type = video_list[f'video_{i}']['definition']
                    video_url = b64decode(video_list[f'video_{i}']['main_url']).decode()
                    # print(title + ':' + video_type + '|' + video_url)
                    data = title, video_type, video_url
                    data_list.append(data)
                except KeyError:
                    pass
        finally:
            pass
    return data_list

这就是分析头条并提取的视频链接的过程,其中还有某些视频的音频和视频是分开,这个需要提取出音频然后进行合成,目前还没写,有问题的话请指出。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值