如何在Python中仅打印特定链接

如何在Python中仅打印特定链接,python,python-requests,Python,Python Requests,我仍然是Python的新手,但我正在尝试制作我的第一个小程序。 我的目的是只打印以.m3u8结尾的链接(如果可用),而不打印整个网页。 我当前使用的代码: import requests channel1 = requests.get('https://website.tv/user/111111') print(channel1.content) print('\n') channel2 = requests.get('https://website.tv/user/222222') prin

我仍然是Python的新手,但我正在尝试制作我的第一个小程序。 我的目的是只打印以.m3u8结尾的链接(如果可用),而不打印整个网页。 我当前使用的代码:

import requests
channel1 = requests.get('https://website.tv/user/111111')
print(channel1.content)
print('\n')
channel2 = requests.get('https://website.tv/user/222222')
print(channel2.content)
print('\n')
input('Press Enter to Exit...')
我要查找的链接始终总共有47个字符,并且始终是同一个模型,只需更改表示为X的流id:

https://website.tv/live/streamidXXXXXXXXX.m3u8

有人能帮我吗?

这将从网页中提取所有URL,并仅过滤包含所需关键字“.m3u8”的URL


如果我正确理解了您的问题,我想您应该使用Python的
.split()
string方法。如果您的目标是获取像
这样的字符串https://website.tv/live/streamidXXXXXXXXX.m3u8“
并仅提取
“streamidXXXXXXXXX.m3u8”
,然后您可以使用以下代码执行此操作:

web_address = "https://website.tv/live/streamidXXXXXXXXX.m3u8"
specific_file = web_address.split('/')[-1]
print(specific_file)

对这样的字符串调用
.split('/')
将返回一个字符串列表,其中列表中的每个项都是字符串的不同部分(第一部分是
“https:
,等等)。最后一个(索引[-1])将是您想要的文件扩展名。

您可以使用正则表达式解决此问题

说明:

这里是表达式部分。*?意味着要考虑所有的东西,以及在B(EXPR)\B中所包含的任何东西都需要强制性地存在。

例如:

import re

link="https://website.tv/live/streamidXXXXXXXXX.m3u8"

p=re.findall(r'.*?\b.m3u8\b',link)
print(p)
输出:

['https://website.tv/live/streamidXXXXXXXXX.m3u8']

有几种方法可以实现这一点,一种是使用regex
findall
从我们的
url\u列表中返回匹配url列表的方法

另一个选项也可以是BeautifulSoup,但是如果没有更多关于
html
结构的信息,它可能不是这里最好的工具

使用Regex

from re import findall
from requests import get


def check_link(response):
    result = findall(
        r'.*?\b.m3u8\b',
        str(response.content),
    )
    return result

def main(url):
    response = get(url)
    if response.ok:
        link_found = check_link(response)
        if link_found:
            print('link {} found at {}'.format(
                    link_found,
                    url,
                ),
            )

if __name__ == '__main__':
    url_list = [
        'http://www.test_1.com',
        'http://www.test_2.com',
        'http://www.test_3.com',
    ]
    for url in url_list:
        main(url)

    print("All finished")

试试这个,我想它会很结实

import re

links=[re.sub('^<[ ]*a[ ]+.*href[ ]*=[ ]*',  '', re.sub('.*>$', '', link) for link in re.findall(r'<[ ]*a[ ]+.*href[ ]*=[]*"http[s]*://.+\.m3u8".*>',channel2.content)]
重新导入
links=[re.sub('^$','',link),用于re.findall(r'',channel2.content)中的链接]
import re

links=[re.sub('^<[ ]*a[ ]+.*href[ ]*=[ ]*',  '', re.sub('.*>$', '', link) for link in re.findall(r'<[ ]*a[ ]+.*href[ ]*=[]*"http[s]*://.+\.m3u8".*>',channel2.content)]