首页 > 解决方案 > 如何使用正则表达式通过 BeautifulSoup 获取脚本内的链接

问题描述

这是我的代码:

videoresponse = s.get("https://platzi.com/clases/1272-sql-mysql/11085-bienvenidos-al-curso9999/")
soup = BeautifulSoup(videoresponse.content,'html5lib')
scripts = soup.findAll('hls')
print(scripts)#It doesnt works, just prints []

它包含带有一些<script></script>标签的响应。其中一个有这段代码:

 iframes: [],
 videos: {"serverA": {"id": "serverA", "hls": "https://movin-b.platzi.com/080e9d74-4dbe-4de8-baa5-1fe3ae97f8a9/5ae7e0dee883414be4a13216.ism/manifest(format=m3u8-aapl,audio-only=false)", "dash": "https://movin-b.platzi.com/080e9d74-4dbe-4de8-baa5-1fe3ae97f8a9/5ae7e0dee883414be4a13216.ism/manifest(format=mpd-time-csf)"}, "serverB": {"id": "serverB", "hls": "https://movin.platzi.com/080e9d74-4dbe-4de8-baa5-1fe3ae97f8a9/5ae7e0dee883414be4a13216.ism/manifest(format=m3u8-aapl,audio-only=false)", "dash": "https://movin.platzi.com/080e9d74-4dbe-4de8-baa5-1fe3ae97f8a9/5ae7e0dee883414be4a13216.ism/manifest(format=mpd-time-csf)"}, "serverC": {"id": "serverC", "hls": "https://mdstrm.com/video/5ae7e0dee883414be4a13216.m3u8"}},

我需要提取链接:“m3u8”或换句话说,hls的值。在所有响应中只有三个“HLS”:和“m3u8”,所以,尝试使用 BeautifulSoup 我发现它只适用于 HTML 标签,或者在这种情况下,适用于正则表达式,但我不知道如何使用它。

有了这个,我将在响应中创建一个带有 m3u8 链接的数组,因为有时视频可用的服务器少于 3 个。

如果您能告诉我如何制作 re,我将不胜感激,我知道我需要导入 re 模块,但我不知道如何制作正则表达式以供使用。

标签: pythonpython-3.xpython-2.7

解决方案


这种方式怎么样,只需使用python标准json api如下

import json
test = """{"serverA": {"id": "serverA", "hls": "https://movin-b.platzi.com/080e9d74-4dbe-4de8-baa5-1fe3ae97f8a9/5ae7e0dee883414be4a13216.ism/manifest(format=m3u8-aapl,audio-only=false)", "dash": "https://movin-b.platzi.com/080e9d74-4dbe-4de8-baa5-1fe3ae97f8a9/5ae7e0dee883414be4a13216.ism/manifest(format=mpd-time-csf)"}, "serverB": {"id": "serverB", "hls": "https://movin.platzi.com/080e9d74-4dbe-4de8-baa5-1fe3ae97f8a9/5ae7e0dee883414be4a13216.ism/manifest(format=m3u8-aapl,audio-only=false)", "dash": "https://movin.platzi.com/080e9d74-4dbe-4de8-baa5-1fe3ae97f8a9/5ae7e0dee883414be4a13216.ism/manifest(format=mpd-time-csf)"}, "serverC": {"id": "serverC", "hls": "https://mdstrm.com/video/5ae7e0dee883414be4a13216.m3u8"}}"""
all_servers = json.loads(test)
for server_key in all_servers:
    print(all_servers[server_key]["hls"])

这是控制台输出

> https://movin-b.platzi.com/080e9d74-4dbe-4de8-baa5-1fe3ae97f8a9/5ae7e0dee883414be4a13216.ism/manifest(format=m3u8-aapl,audio-only=false)
> https://movin.platzi.com/080e9d74-4dbe-4de8-baa5-1fe3ae97f8a9/5ae7e0dee883414be4a13216.ism/manifest(format=m3u8-aapl,audio-only=false)
> https://mdstrm.com/video/5ae7e0dee883414be4a13216.m3u8

推荐阅读