admin 管理员组

文章数量: 1103806

由于业务需要,需要抓取解析腾讯视频真实地址、文章中的数据。经过1天的摸索,终于分析出来了,步骤如下:

一、获取发送Https请求文章地址返回的信息,经查看<html><body><div>中无任何文章信息,到这个地方可以确定,腾讯新闻文章是浏览器客户端进行解析数据装配的。此时就需要看js代码,发现里面的数据有unicode编码格式。需要把代码unicode转译一下,我这里使用java语言apache-common-lang包方法转码,信息中有用的就是<script>的window.__initData数据
可以看到content内容是我们所需要的。进而转化为json格式,获取有用数据,java代码如下:

// 示例信息
String returnHtml = "<script>window.__initData = {\"content\": {\"title\": \"河南焦作幼师*屏蔽的关键字*致23名幼儿*屏蔽的关键字*:知情人称因两老师闹矛盾\"}}......</script>";

// 获取可解析的json字符串数据
String str = jsStr.substring(jsStr.indexOf("<script>window.__initData =") + "<script>window.__initData =".length(), jsStr.indexOf(";</script>"));

// unicode转码
str = StringEscapeUtils.unescapeJava(str);

// 部分字符替换转义,防止json解析报错
str = str.replaceAll("\"\\{", "\\{").replaceAll("\\}\"", "\\}");

// 转化为JSON对象处理
JSONObject jsonObject = JSON.parseObject(str);

// 获取所有内容
JSONObject jsonContent = jsonObject.getJSONObject("content");

解析后的json主要数据如下:

{
    "content": {
        "cnt_attr": {
            "IMG_0": {
                "img": {
                    "imgurl0": {
                        "imgurl": "http://inews.gtimg/newsapp_match/0/8386465468/0"
                    }
                }
            },
            "IMG_1": {
                "img": {
                    "imgurl0": {
                        "imgurl": "http://inews.gtimg/newsapp_match/0/8391248870/0"
                    }
                }
            },
            "VIDEO_0": {
                "img": {
                    "imgurl1000": {
                        "imgurl": "http://inews.gtimg/newsapp_ls/0/8386704268_640480/0"
                    }
                },
                "vid": "s0856no20s6"
            }
        },
        "cnt_html": "<P>焦作市解放区区委相关部门了解到,事发系幼儿园一名教师向当日中班的食物中投入亚硝酸盐,目前,该教师已被警方刑拘。</P>",
        "desc": "焦作市解放区区委相关部门了解到,事发系幼儿园一名教师向当日中班的食物中投入亚硝酸盐",
        "image_count": 2,
        "longtitle": "河南焦作幼师*屏蔽的关键字*致23名幼儿*屏蔽的关键字*:知情人称因两老师闹矛盾",
        "pub_time": "2019-04-02 08:19:27",
        "pubtime": "2019-04-02",
        "source": "新京报",
        "title": "河南焦作幼师*屏蔽的关键字*致23名幼儿*屏蔽的关键字*:知情人称因两老师闹矛盾"
    }
}

通过数据可以获取到文章的相关信息

这里重点说一下视频解析的相关步骤:

二、获取视频关键参数vid

1、如果是纯视频网站,例如:https://view.inews.qq/a/20190311V0HAK600?uid=&cur_vid=s084748qz5b

根据cur_vid的值获取vid

2、如果是文章中嵌入视频:则通过前面获取到的json数据 获取到VIDEO_0中的vid

三、通过vid获取到视频的真实路径地址

发起一个http get请求 地址:http://vv.video.qq/getinfo?platform=101001&charge=0&otype=json&defn=shd&vids=vid值

返回信息做一下处理,转化成json格式,主要json格式数据如下:

{
	"vl": {
        "vi": [
            {
                "fn": "s0856no20s6.mp4",
                "fvkey": "4112E6BB6363A83937E2E5829C6565DDB5839AFF0653754DEFA66AE8780765559E69EEBE139DB246CA80D1F5EAAA0BB8FE6EFCFDAB2C1BB22B64E9BEF9F59CA17D3DBDC068BC23FAD136251E8A7D6C01313E9BA16027D0C661334F7A7DB7934172D535D1AE1486F5",
                "ti": "焦作一幼儿园老师投毒致23名幼儿中毒 知情人称因两老师闹矛盾",
                "ul": {
                    "ui": [
                        {
                            "url": "http://14.215.93.155/om.tc.qq/AgATFdfgDgaHAbqs7mZP-J39GAhMgjQvFUS1dcILxHok/uwMROfz0r5zEYaQXGdGnC2dfDmYZuJ2pY2FAhIKRx44JHPsG/"
                        },
                        {
                            "url": "http://ugcws.video.gtimg/uwMROfz0r5zEYaQXGdGnCmdfDmaF5AooPRaJaJ0-CXKTz0g7/"
                        }
                    ]
                }
            }
        ]
    }
}

这里需要三个值: fn值,fvkey值,url值(取一个)

四、组装视频真实地址

最终视频地址就是 url+fn+"?"+fvkey=fvkey值

这里是拼接后的地址:

http://ugcws.video.gtimg/uwMROfz0r5zEYaQXGdGnCmdfDmaF5AooPRaJaJ0-CXKTz0g7/s0856no20s6.mp4?vkey=4112E6BB6363A83937E2E5829C6565DDB5839AFF0653754DEFA66AE8780765559E69EEBE139DB246CA80D1F5EAAA0BB8FE6EFCFDAB2C1BB22B64E9BEF9F59CA17D3DBDC068BC23FAD136251E8A7D6C01313E9BA16027D0C661334F7A7DB7934172D535D1AE1486F5

直接访问就可以获取到真实的视频地址,也可以直接保存成对应格式文件

本文标签: 腾讯 真实 地址 文章 新闻