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
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
今日头条爬虫技术说明 ========== 整体思路 -------- 1. 抓取今日头条app的数据包 2. 分析数据包,找出请求的数据(如文章列表,文章url等) 3. 根据文章url等信息,抓取文章内容 4. 若文章中包含视频,则取视频url,然后下载 具体实现 ------ ### 一、抓包 ### 1. 工具:`Fiddler`、 `android`手机、`google浏览器` 2. 步骤: (1)本示例采用[Fiddler](http://fiddler2.com/ "Fiddler")来抓包,安装到电脑,我的电脑是win10 (2)具体配置及使用请见[http://jingyan.baidu.com/article/03b2f78c7b6bb05ea237aed2.html](http://jingyan.baidu.com/article/03b2f78c7b6bb05ea237aed2.html "百度经验") (3)打开今日头条app,开始抓包,抓取到的包如下:![](http://i.imgur.com/fC3y96p.png) (4)经分析得知左侧的json文件及为文章列表,如图![](http://i.imgur.com/I2Z8Iph.png) 如右侧第一个content所指的json文件,文件内容为![](http://i.imgur.com/lwaDLHP.png)此时手机上的信息为 <img src = "http://i.imgur.com/LFSL1AA.png" width = "40%"> 可得上面的结论正确 ### 二、分析 ### 1. 分析所抓到的文章列表数据包:大致分为两类,一类是有视频的文章,一类则是没有视频的文章。 有视频的文章json内容里均有`video_id`这个key,如下图所示:![](http://i.imgur.com/T4hqaIc.png) 2. 没有视频的文章:json文件内容均包含`title`、 `abstract`、 `article_url`等信息,具体内容如下. -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值