首页 > 编程语言 >Python爬虫:原来微博上的视频下载链接在这啊

Python爬虫:原来微博上的视频下载链接在这啊

时间:2023-03-02 18:23:32浏览次数:59  
标签:视频 Python 爬虫 url https 微博上 com 链接 下载

最近看了一下网页版的微博,觉得那上面的视频不错,想获取它上面的下载链接,于是就写了这篇博文。

1. 几个视频播放平台的下载链接的实现


1. 西瓜视频

西瓜视频这个平台上面的视频下载链接一开始就存在于视频播放界面,电脑键盘F12键查看源码,按Ctrl+F搜索script标签,依次点击,可以发现其中一个script标签下有一段json数据,而当前播放的视频的下载链接就在这个json数据中,只不过下载视频进行了加密,根本看不懂,需要找到相应的解密函数即可。(感兴趣的读者可以去看看小编的这篇文章:Python爬虫:从js逆向了解西瓜视频的下载链接的生成)

2.斗鱼视频
斗鱼视频这个平台上的视频下载,使用了ajax技术,在当前播放界面可以找到一个ajax请求,在这个请求里面可以找到当前视频的m3u8文件下载链接(但是这个ajax请求是一个post请求,且请求参数进行了加密,需要模拟加密才能进行访问),之后根绝这个m3u8文件可以下载当前视频的一些ts文件,最后把ts文件合并称mp4文件即可.(感兴趣的读者可以去看看小编的这篇文章:Python爬虫:通过js逆向我发现了斗鱼视频请求参数的加密原理)

3.快手视频
快手视频这个平台上的视频下载和斗鱼类似,但比斗鱼简单很多.(感兴趣的读者可以去看看小编的这篇文章:Python爬虫:给我一个链接,快手视频随便下载)

2. 实现原理

实现原理和斗鱼视频、快手视频的原理一样,找到相应的ajax请求链接即可(这又是一个post请求)

但是如果要使用Python爬虫来得到这个数据,请求头需要添加一些字段,比如cookie、user-agent等字段。

但是不知道小编这个post请求data这个参数是不是写错了(requests模块),还是这个链接存在一定问题,反正试了很多方法,总是获取不到完整数据,最后把post请求改成get请求才最终成功获取。

3. 运行结果

[video(video-fHqZMMbf-1677750262052)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=865253588)(image-/i/ll/?i=img_convert/ab51fed4277a57c7dca4fa877db89738.jpeg)(title-Python爬虫:抓取微博上的视频下载链接)]

参考代码如下:

import requests
import json
import re

# https://weibo.com/tv/show/1034:4857185377910909?mid=4857186621067064
video_url = input('输入:')
id = re.findall('https://weibo.com/tv/show/(\d*:\d*)?.*',video_url)[0]
url = 'https://weibo.com/tv/api/component?page=/tv/show/{0}&data={1}'
data_str = '{%22Component_Play_Playinfo%22:{%22oid%22:%22' + id + '%22}}'
url = url.format(id, data_str)
headers = {
    "cookie": "SINAGLOBAL=1642093035151.6916.1590980167697; UOR=news.huse.edu.cn,widget.weibo.com,www.baidu.com; SCF=AoITVZf4HS3L4qWC3iYin9ewmWRQdnQsEsKnkUAKVrhUGsrSuJsFtN6Puc1jeCHZyLFnsESBUt7YCk5DWM4I86o.; SUBP=0033WrSXqPxfM72wWs9jqgMF55529P9D9W5yXxXxcVnl70-8qPgRKnCg5JpVF02ReK-E1hMReKep; SUB=_2AkMU3QDBdcPxrAVSmvsVxGnqbYtH-jynCGk3An7uJhMyAxh87n0PqSVutBF-XEV4WnRTgvv_qqEol-0DEUdZBTB_; UPSTREAM-V-WEIBO-COM=b09171a17b2b5a470c42e2f713edace0; _s_tentry=-; Apache=2882565213456.4116.1677573461765; ULV=1677573461958:47:1:1:2882565213456.4116.1677573461765:1669435390809; XSRF-TOKEN=KLbhVzQdbXXP_F7laqGMs0xt; WBPSESS=Dt2hbAUaXfkVprjyrAZT_FgOH_8DbGpQMRQSA1lwg1qH-m_kdZLq1PmsYPFYeK6IewUd4GmxAOEZC3rK48r1iqi82kid-HnqOCAwipsM3hrg5LtskejSkGEhijD2kFHQ8CBnf3q1vzJpVpquSnhK5Q==",
    "origin": "https://weibo.com",
    "page-referer": "/tv/show/1034:4857185377910909",
    "referer": "https://weibo.com/tv/show/1034:4857185377910909?mid=4857186621067064",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4507.400",
}
rsp = requests.get(url=url, headers=headers)
dict2 = json.loads(rsp.text)
urls_dict = dict2['data']['Component_Play_Playinfo']['urls']
for key in urls_dict:
    print(key,f'https:{urls_dict.get(key)}')



标签:视频,Python,爬虫,url,https,微博上,com,链接,下载
From: https://www.cnblogs.com/liuze-2/p/17172914.html

相关文章

  • python_opencv_画图_直线_矩形_圆_多边形_文字提示
    opencv绘图参数说明绘制形状的函数有一些共同的参数:img:要绘制形状的图片color:绘制的颜色彩色图就传入BGR的一组值,如蓝色就是(255,0,0)灰度图,传入一个灰度值就......
  • python 在编写库需要调用自己内部的文件
    ChatGPT回答:如果你的库需要调用自己内部的文件,可以使用相对路径来引用这些文件。假设你的库名为mylib,它的文件结构如下:mylib/__init__.pymodule1.pydata......
  • python3和scrapy使用亿牛云隧道代理问题以及代码
    一、前言近期,我参与了一个需要爬取国家食品药品监督局数据的项目,但该网站存在IP屏蔽机制。因此,我需要在Scrapy框架中实现自动IP切换,才能完成任务。然而,尽管我使用了第三方......
  • PYTHON对象
    PYTHON对象类的属性称之为成员变量类的行为称之为成员方法self关键字用来表示类对象自身在方法内部,想要访问类的成员变量,必须使用self可以在传参的时候忽略......
  • 【编程基础之Python】7、Python基本数据类型
    (【编程基础之Python】7、Python基本数据类型)Python基本数据类型Python是一种动态类型语言,它支持多种基本数据类型和复合数据类型,让开发人员能够更加方便地处理不同类型......
  • Python类和对象的绑定方法及非绑定方法
    类中定义的方法大致可以分为两类:绑定方法和非绑定方法。其中绑定方法又可以分为绑定到对象的方法和绑定到类的方法。一、绑定方法1对象的绑定方法在类中没有被任何装饰器修......
  • Python 入门的基本语法规则
    官方对Python的介绍如下:Python是一款易于学习且功能强大的编程语言。它具有高效率的数据结构,能够简单又有效地实现面向对象编程。Python有着非广泛的应用,几乎所有大......
  • python监听麦克风数据
    importpyaudioimportnumpyasnpimporttimeCHUNK=1024FORMAT=pyaudio.paInt16CHANNELS=2RATE=44100defaudioCheckAI():#麦克风检测aiglobal......
  • Python设置字符串颜色
    使用\033[3表示字体颜色,\033[4表示背景色。示例print("\033[31;1mhello")print("\033[32;1mhello")print("\033[33;1mhello")print("\033[34;1mhello")print("\033[3......
  • Python生成PDF:Reportlab的六种使用方式
     Reportlab是Python创建PDF文档的功能库这里是整理过的六种Reportlab使用方式,主要参考的是《ReportLabUserGuide》 一、使用文档模板DocTemplateReportlab的基础......