def get_json(htmltxt): r = re.findall(r'<script>window.playinfo=(.*?)</script>', htmltxt)[0] js = json.loads(r) print(js) audiourl = js["data"]["dash"]["audio"][0]["base_url"] videourl = js["data"]["dash"]["video"][0]["base_url"] download(audiourl, videourl)
时间: 2023-08-20 20:57:23 浏览: 51
这段代码是`get_json`函数的实现部分。它的作用是从HTML文本中提取出包含视频信息的JSON数据,并解析该JSON数据。
具体来说,它使用正则表达式`re.findall`从HTML文本中匹配出符合特定模式的字符串,并返回一个列表。这里使用的正则表达式是`<script>window.playinfo=(.*?)</script>`,它匹配以`<script>window.playinfo=`开头,以`</script>`结尾的字符串,并捕获其中的内容。
然后,使用`json.loads`将捕获到的字符串解析为Python对象,这里假设它是一个有效的JSON格式。解析后的结果存储在变量`js`中。
接下来,它打印出解析后的JSON对象,以便查看其结构和内容。
最后,它从JSON对象中提取出音频和视频的下载链接,并将这些链接传递给名为`download`的函数进行下载操作。
请注意,这段代码假设从HTML文本中匹配到的JSON数据是有效的,并且假设JSON数据中存在需要的字段和对应的值。在实际运行时,建议添加错误处理逻辑以确保代码的可靠性和稳定性。
相关问题
r=re.findall(r'<script>window.__playinfo__=(.*? )</script>',htmltxt)[0]
<stdio.h>
#includestdlib.h>
#include <string.h>
//书结构
typedef struct Book {
char title[100];
char author[100];
totalCopies;
int borrowedCopies;
struct* next;
} Book;
全局变量,向链表头节点
* head = NULL;
// 从文件中加载图书信息到链表
void loadBooksFromFile()这段代码使用正则表达式在htmltxt中查找匹配的字符串,并将匹配结果存储在变量 {
FILE* file = fopen("书籍信息.txt", "r");
if (file == NULL) {
printf("无法打开文件。\n");
return;
}
char line[300];
while (fgets(line, sizeof(line),)) {
r中。具体来说,它使用了re.findall()函数来查找符合模式r'<script>window.__playinfo Book* book = (Book*)malloc(sizeof(Book));
sscanf(line, "%[^,%[^,],%d,%d", book->title, book->author, &(book->totalCopies), &(book->borrowedCopies));
book->next =;
if (head == NULL) {
head = book;
} else {
current = head;
while (current->next != NULL) {
current = current-> }
current->next = book;
}
}
fclose(file);
}
// 将链__=(.*? )</script>'的字符串,并将第一个匹配结果存储在r中。注意,这里的模表中的图书信息保存到文件
void saveBooksToFile() {
FILE* file = fopen("书籍信息.txt", "式字符串使用了非贪婪匹配符号"?",表示尽可能少地匹配字符。
import requests import re import json from moviepy.editor import VideoFileClip, AudioFileClip headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0', "referer": "https://message.bilibili.com/" } def get_url_html(url): req = requests.get(url, headers=headers) htmltext = req.text get_json(htmltext) def get_json(htmltxt): r = re.findall(r'<script>window.__playinfo__=(.*?)</script>', htmltxt)[0] js = json.loads(r) print(js) audiourl = js["data"]["dash"]["audio"][0]["base_url"] videourl = js["data"]["dash"]["video"][0]["base_url"] download(audiourl, videourl) def download(audiourl, videourl): res = requests.get(url=audiourl, headers=headers) print('音频爬取中,等待....') with open("未命名.mp3", "wb") as f: f.write(res.content) res = requests.get(url=videourl, headers=headers) print('视频爬取中,等待....') with open("未命名.mp4", "wb") as f: f.write(res.content) merge_audio_video("未命名.mp3", "未命名.mp4", "下载.mp4") print('合并完毕!') def merge_audio_video(audio_path, video_path, output_path): audio = AudioFileClip(audio_path) video = VideoFileClip(video_path) video = video.set_audio(audio) video.write_videofile(output_path, codec="libx264", audio_codec="aac") if __name__ == "__main__": url=input("请输入B站视频播放链接:") get_url_html(url)
这段代码是一个用于从B站视频链接中爬取音频和视频,并将它们合并成一个新的视频文件的程序。具体来说,它使用了requests库来发送HTTP请求,re库来进行正则表达式匹配,json库来解析JSON数据,以及moviepy库用于处理音频和视频文件。
首先,它定义了一个名为`headers`的字典,用于设置HTTP请求的头部信息,包括User-Agent和referer。然后,它定义了一个名为`get_url_html`的函数,用于获取指定B站视频链接的HTML内容,并将HTML内容传递给`get_json`函数进行处理。
在`get_json`函数中,它使用正则表达式从HTML内容中提取出包含视频信息的JSON数据,并将其转化为Python对象。然后,它从JSON数据中获取音频和视频的下载链接,并将这些链接传递给`download`函数进行下载。
在`download`函数中,它使用requests库下载音频和视频文件,并分别保存到本地文件中。然后,它调用`merge_audio_video`函数将音频和视频合并成一个新的视频文件,并保存为"下载.mp4"。
最后,在`if __name__ == "__main__":`条件下,它通过用户输入获取B站视频链接,并调用`get_url_html`函数开始执行爬取和合并操作。
请注意,这段代码依赖于requests、re、json和moviepy库,需要在运行之前确保这些库已经安装。另外,合并音频和视频需要一定的时间,可能会根据视频的大小和网络环境而有所不同。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)