为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

桃花长相依 2023-05-23 19:14:00
我仍然是 Python 的新手,但我正在尝试制作我的第一个小程序。我的意图是仅打印以.m3u8结尾的链接(如果可用)而不是打印整个网页。我目前使用的代码:import requestschannel1 = 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谁能帮我?
查看完整描述

5 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您可以使用正则表达式来解决这个问题。


解释:


在表达式部分。*?意味着考虑所有内容以及包含在 \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']


查看完整回答
反对 回复 2023-05-23
?
心有法竹

TA贡献1866条经验 获得超5个赞

有几种方法可以解决这个问题,一种让我想起其他人已经触及的方法是使用正则表达式,它从我们的.findallurl_list


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


使用正则表达式


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")


查看完整回答
反对 回复 2023-05-23
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

试试这个,我认为这会很强大


import re


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


查看完整回答
反对 回复 2023-05-23
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

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


import requests

import re

def get_desired_url(data):

    urls = []

    for url in re.findall(r'(https?://\S+)', data):

        if ".m3u8" in url:

            urls.append(url)

    return urls


channel1 = requests.get('https://website.tv/user/111111')

urls = get_desired_url(channel1 )


查看完整回答
反对 回复 2023-05-23
?
慕容708150

TA贡献1831条经验 获得超4个赞

如果我正确理解你的问题,我认为你想使用 Python 的.split()字符串方法。如果您的目标是获取一个类似的字符串"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])将是您想要的文件扩展名。


查看完整回答
反对 回复 2023-05-23
  • 5 回答
  • 0 关注
  • 246 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信