Python:由b站临时短链接获取到永久链接(去除分享中的杂项)

📚博客主页:knighthood2001
公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下)
🎃知识星球:【认知up吧|成长|副业】介绍
❤️如遇文章付费,可先看看我公众号中是否发布免费文章❤️
🙏笔者水平有限,欢迎各位大佬指点,相互学习进步!

用过b站的小伙伴,应该都知道,b站视频分享后,会生成一段包含标题和链接的内容,比如:【xxxxx】 https://b23.tv/Wr3moAZ。

今天,我们的重点就是去找到这个链接背后的永久链接(因为不排除这个链接过个十天半月后不能使用),而且在爬虫中,这个链接是不太规范的,如果使用这个链接当作Referer,肯定是爬不出东西的。

本文内容分三步

根据短链接网址获取其背后的永久链接


import requests
def get_permanent_link(url):# 使用requests库发送head请求(也可以选择GET,但HEAD更快且消耗资源更少)response = requests.head(url, allow_redirects=True)# print(response.headers)# 检查是否有重定向发生if 'location' in response.headers:# 如果响应头中包含'location',则表示发生了重定向# 递归调用自身以处理连续重定向的情况return get_permanent_link(response.headers['location'])else:# 如果没有重定向,则返回当前请求的URL作为永久链接return response.url
# 测试函数
temporary_link = "https://b23.tv/Oz899Lb"
permanent_link = get_permanent_link(temporary_link)
print("永久链接是:", permanent_link)
# https://www.bilibili.com/video/BV1LT421S7sh?buvid=XXBF6E0BE943914C6FCC270C1BC645FEABF88&from_spmid=tm.recommend.0.0&is_story_h5=false&mid=rD2uXjILlSxisOyhyvffSg%3D%3D&p=1&plat_id=116&share_from=ugc&share_medium=android&share_plat=android&share_session_id=a834af0a-dc13-4fbe-bf8f-dbc285b6c4db&share_source=COPY&share_tag=s_i&spmid=united.player-video-detail.0.0&timestamp=1716192491&unique_k=Oz899Lb&up_id=259649365

首先,最重要的就是那个短链接网址了,我们需要通过它,获取到背后的永久的url,这时候requests就派上用场了,这里涉及到判断重定向。location是HTTP协议中用来表示重定向位置的头部字段。如果响应头中包含location,那么通常意味着服务器希望客户端去访问另一个URL,即发生了重定向

因此这里需要判断一下,但是,经过几次测试,b站貌似没有发生重定向,因此直接像代码中的else情况处理即可。

此时,你就获取到了长链接。

去除短链接外的内容

争对以下这样的分享内容,我们需要提取出url,因此需要去除其他部分。
在这里插入图片描述

这时候,正则表达式就派上用场了。

import re
# 提取text中的url
def get_url(text):# 匹配url的正则表达式pattern = r'https?://[^\s]+'match = re.search(pattern, text)if match:return match.group()

通过这个代码,能够只留下这个短链接。

去除获得的长链接中的参数

通过上面代码,获得到的url,已经是长链接了。

但是,获取到的url中,带有很多参数,这些参数目前来看并没有什么用处,因此可以把他去除。

这里同样采用的正则表达式

经过观察,可以发现,b站视频链接中?后面的就是参数了,去掉不影响视频的加载。

代码如下:

# 获得纯净url
def get_pure_url(text):# 匹配url的正则表达式pattern = r'^(https?://[^\?]+)'match = re.search(pattern, text)if match:return match.group()else:return None

通过在❓处断开,取前半部分,就得到了最关键的url了。

整合一下

整合一下,使得更加美观,且后续只需要更改一下main函数的名字,就可以在别处调用了。

import requests
import re
"""
# 电脑分享链接:【夏天晚上吹着小风吃龙虾烧烤太爽了!天津凌奥夜市88元小龙虾自助】 https://www.bilibili.com/video/BV1Bw4m1i7ko/?share_source=copy_web&vd_source=80a8f348074649de1e18f1345dee7db3
# 返回数据:https://www.bilibili.com/video/BV1Bw4m1i7ko/?share_source=copy_web&vd_source=80a8f348074649de1e18f1345dee7db3
# 手机分享链接:【杭州首家100元一位313羊庄自助,震惊!-哔哩哔哩】 https://b23.tv/Wr3moAZ
# 返回数据:https://www.bilibili.com/video/BV11U411d7fR?buvid=XXBF6E0BE943914C6FCC270C1BC645FEABF88&from_spmid=tm.recommend.0.0&is_story_h5=false&mid=rD2uXjILlSxisOyhyvffSg%3D%3D&p=1&plat_id=116&share_from=ugc&share_medium=android&share_plat=android&share_session_id=4931472e-3d3c-4a66-aa7f-ee419ad505fc&share_source=COPY&share_tag=s_i&spmid=united.player-video-detail.0.0&timestamp=1717260126&unique_k=Wr3moAZ&up_id=257385649
"""
# 提取text中的url
def get_url(text):# 匹配url的正则表达式pattern = r'https?://[^\s]+'match = re.search(pattern, text)if match:return match.group()
def get_permanent_link(url):# 使用requests库发送head请求(也可以选择GET,但HEAD更快且消耗资源更少)response = requests.head(url, allow_redirects=True)# print(response.headers)# 检查是否有重定向发生if 'location' in response.headers:# 如果响应头中包含'location',则表示发生了重定向# 递归调用自身以处理连续重定向的情况return get_permanent_link(response.headers['location'])else:# 如果没有重定向,则返回当前请求的URL作为永久链接return response.url# 获得纯净url
def get_pure_url(text):# 匹配url的正则表达式pattern = r'^(https?://[^\?]+)'match = re.search(pattern, text)if match:return match.group()else:return None
def main(text):print(get_pure_url(get_permanent_link(get_url(text))))return get_pure_url(get_permanent_link(get_url(text)))
if __name__ == '__main__':aaa = "【夏天晚上吹着小风吃龙虾烧烤太爽了!天津凌奥夜市88元小龙虾自助】 https://www.bilibili.com/video/BV1Bw4m1i7ko/?share_source=copy_web&vd_source=80a8f348074649de1e18f1345dee7db3"bbb = "【杭州首家100元一位313羊庄自助,震惊!-哔哩哔哩】 https://b23.tv/Wr3moAZ"main(aaa)main(bbb)

一点总结

  • 电脑上和手机上点击分享后复制的内容,其实是不一样的,电脑上复制的不是像手机上的短链接,而是长链接,但是无伤大雅,都可以使用这种方式,去获取到符合要求的url。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/20876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

首套真题解析!安徽211难度适中!两门课!

这个系列会分享名校真题。并做详细解析!此为24年第一套! 今天分享的是22年合肥工业856的信号与系统试题及解析。 小马哥Tips: 本套试卷难度分析:本套试题内容难度中等,里面较多的考察了信号与系统的知识&#xff0c…

Nodejs-- 网络编程

网络编程 构建tcp服务 TCP tcp全名为传输控制协议。再osi模型中属于传输层协议。 tcp是面向连接的协议,在传输之前需要形成三次握手形成会话 只有会话形成了,服务端和客户端才能想发送数据,在创建会话的过程中,服务端和客户…

Mac vm虚拟机激活版:VMware Fusion Pro for Mac支持Monterey 1

相信之前使用过Win版系统的朋友们对这款VMware Fusion Pro for Mac应该都不会陌生,这款软件以其强大的功能和适配能力广受用户的好评,在Mac端也同样是一款最受用户欢迎之一的虚拟机软件,VM虚拟机mac版可以让您能够轻松的在Apple的macOS和Mac的…

Java(八)——String类

文章目录 String类String的构造及内存分布构造内存分布 常用方法判等比较查找转化替换拆分截取 字符串的不可变性StringBuilder和StringBuffer String类 C语言中没有专门的字符串类型,一般使用字符数组或字符指针表示字符串,而字符串的函数需要包含头文…

【云原生】Kubernetes----配置资源管理Secrets与ConfigMaps

目录 一、Secrets (一)Secrets概述 (二)Secrets类型 (三)Secrets使用方式 (四)创建Secrets 1.陈述式命令创建 1.1 定义用户与密码文件 1.2 使用陈述式命令创建 2.使用base6…

详解智慧互联网医院系统源码:开发医院小程序教学

本篇文章,笔者将详细介绍智慧互联网医院系统的源码结构,并提供开发医院小程序的详细教学。 一、智慧互联网医院系统概述 智慧互联网医院系统涵盖了预约挂号、在线咨询、电子病历、药品管理等多个模块。 二、系统源码结构解析 智慧互联网医院系统的源码…

OpenShift 4 - OpenShift Service Mesh 3 预览

《OpenShift / RHEL / DevSecOps 汇总目录》 了解 OpenShift Service Mesh 3 的变化 OpenShift Service Mesh 是一套在 OpenShift 上安装部署、跟踪监控 Istio 运行环境的实现。红帽在 2023 年底推出了技术预览版的 OpenShift Service Mesh 3,它和目前的 OpenShif…

IP代理池是什么?

从事跨境行业的朋友们总会有一个疑问,为什么自己所合作的IP代理商的IP在使用的过程中账号会有莫名封禁的问题,会不会是自己在使用的过程中错误的操作违反了平台的规则,其实不然有可能会是IP代理池纯净度不高的问题,有可能自己在使…

UI线程和工作线程

引用:windows程序员面试指南 工作线程 只处理逻辑的线程,例如:启动一个线程,用来做一个复杂的计算,计算完成之后,此线程就自动退出,这种线程称为工作线程 UI线程 Windows应用程序一般由窗口…

Ansible05-Ansible进阶(流程控制、Roles角色、加密优化调优等)

目录 写在前面7 Ansible 进阶7.1 流程控制7.1.1 handlers触发器与notify7.1.1.1 未使用handlers7.1.1.2 使用handlers 7.1.2 when判断7.1.2.1 when的语法7.1.2.2 when判断主机名选择模块输出7.1.2.3 when结合register变量 7.1.3 loop/with_items循环7.1.3.1 with_items案例7.1.…

本地公网IP是什么?

本地公网IP(Public IP Address)是指分配给计算机或设备的可在互联网上直接访问的唯一标识符。每个连接到互联网的设备都会被分配一个公网IP,用于与其他设备进行通信。本地公网IP在网络通信中起到了非常重要的作用,为用户提供了方便…

单实例11.2.0.3迁移到RAC11.2.0.4_使用RMAN 异机恢复

保命法则:先备份再操作,磁盘空间紧张无法备份就让满足,给自己留退路。 场景说明: 1.本文档的环境为同平台、不同版本(操作系统版本可以不同,数据库小版本不同),源机器和目标机器部…

[数据集][目标检测]手枪检测数据集VOC+YOLO格式3000张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3000 标注数量(xml文件个数):3000 标注数量(txt文件个数):3000 标注…

STM32作业实现(七)OLED显示数据

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

hadoop配置nfs,window映射nfs

1.修改hadoop配置如下内容,并同步到其它节点 core-site.xml新增配置项 <!-- 允许hadoop用户代理任何其它用户组 --><property><name>hadoop.proxyuser.hadoop.groups</name><value>*</value></property><!-- 允许代理任意服务器…

如何使用KolorPanotourPro制作全景图像网页

目录 前言 KolorPanotourPro是什么 如何制作全景网页 1.拥有全景图 2.导入图片 3.在多张全景图中跳转 4.查看制作的全景网页 结束语 前言 今天是坚持写博客的第十五天&#xff0c;继续为努力和坚持的大家点赞和鼓掌。 书接上文&#xff0c;我们讲了如何使用如何使用A…

【Vulhub】Fastjson 1.2.24_rce复现

文章目录 一&#xff0c;Fastjson是什么&#xff1f;二&#xff0c;fastjson漏洞原理三&#xff0c;判断是否有fastjson反序列化四&#xff0c;复现Fastjson 1.2.24_rce(vulhub)环境配置1.判断是否存在Fastjson反序列化2.反弹shell3.启动RMI服务器4.构造恶意POST请求 一&#x…

[数据集][目标检测]老鼠检测数据集VOC+YOLO格式4107张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4107 标注数量(xml文件个数)&#xff1a;4107 标注数量(txt文件个数)&#xff1a;4107 标注…

linux tomcat版本漏洞升级

Tomcat Session 反序列化代码执行漏洞(CVE-2020-9484) Tomcat 安全限制绕过漏洞(CVE-2018-8034) Tomcat远程代码执行漏洞(CVE-2017-12615) 以上均可以升级版本处理&#xff0c;小版本升级方法 tomcat安装请查看https://blog.csdn.net/qq_42250832/article/details/139015573 1、…

制作ChatPDF之Elasticsearch8.13.4搭建(一)

Elasticsearch8.x搭建 在Windows系统上本地安装Elasticsearch的详细步骤如下&#xff1a; 1. 下载Elasticsearch 访问 Elasticsearch下载页面。选择适用于Windows的版本8.13.4&#xff0c;并下载ZIP文件。 2. 解压文件 下载完成后&#xff0c;找到ZIP文件&#xff08;例如…