Python中如何抓取腾讯视频数据?

怎么腾讯视频最近的更新量少了很多,爬虫抓取正常,是腾讯改变视频的策略了么?
Python中如何抓取腾讯视频数据?

1 回复

import requests
import json
import re

def get_tx_video_info(vid):
    """
    获取腾讯视频信息
    vid: 视频ID(如:k0012e3q4x5)
    """
    # 构造API请求URL
    api_url = f"https://vv.video.qq.com/getinfo?vids={vid}&platform=101001&charge=0&otype=json"
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer': 'https://v.qq.com/'
    }
    
    try:
        # 发送请求
        response = requests.get(api_url, headers=headers, timeout=10)
        response.raise_for_status()
        
        # 处理返回数据(返回的是JSONP格式)
        raw_text = response.text
        json_str = re.search(r'QZOutputJson=(.*);$', raw_text).group(1)
        data = json.loads(json_str)
        
        # 提取关键信息
        if data.get('vl'):
            video_info = {
                'title': data['vl']['vi'][0]['ti'],
                'duration': data['vl']['vi'][0]['td'],
                'vid': vid,
                'play_url': f"https://v.qq.com/x/cover/{vid}.html"
            }
            return video_info
            
    except Exception as e:
        print(f"获取视频信息失败: {e}")
        return None

def get_video_urls(vid):
    """
    获取视频播放地址(需要解析key)
    """
    # 获取视频信息
    info = get_tx_video_info(vid)
    if not info:
        return None
    
    # 构造播放地址请求
    api_url = f"https://vv.video.qq.com/getkey?format=json&vid={vid}&platform=101001"
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer': f'https://v.qq.com/x/cover/{vid}.html'
    }
    
    try:
        response = requests.get(api_url, headers=headers, timeout=10)
        data = response.json()
        
        if data.get('key'):
            # 这里需要根据实际返回结构解析播放地址
            # 实际应用中可能需要进一步处理
            return {
                'title': info['title'],
                'vid': vid,
                'key': data['key']
            }
            
    except Exception as e:
        print(f"获取播放地址失败: {e}")
        return None

# 使用示例
if __name__ == "__main__":
    # 示例视频ID(需要替换为实际ID)
    test_vid = "k0012e3q4x5"
    
    # 获取视频信息
    video_info = get_tx_video_info(test_vid)
    if video_info:
        print("视频信息:")
        print(f"标题: {video_info['title']}")
        print(f"时长: {video_info['duration']}秒")
        print(f"播放页面: {video_info['play_url']}")
    
    # 获取播放地址
    play_info = get_video_urls(test_vid)
    if play_info:
        print(f"\n播放密钥: {play_info.get('key')}")

核心要点:

  1. 腾讯视频数据主要通过其内部API获取,需要模拟正常浏览器请求
  2. 关键参数是视频ID(vid),通常可以从视频页面URL中提取
  3. 需要设置正确的请求头,特别是User-Agent和Referer
  4. 返回数据通常是JSONP格式,需要正则提取JSON部分
  5. 实际播放地址需要额外的密钥(key)请求

注意: 实际播放地址的获取更复杂,涉及多个API调用和参数解析,且腾讯视频会定期更新其反爬机制。此代码仅展示基础信息获取流程。

建议: 优先使用官方API或SDK。

回到顶部