Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to print only a specific link in Python

I'm still a newbie in Python but I'm trying to make my first little program. My intention is to print only the link ending with .m3u8 (if available) istead of printing the whole web page. The code I'm currently using:

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...')

The link I'm looking for always has 47 characters in total, and it's always the same model just changing the stream id represented as X:

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

Can anyone help me?

like image 333
pre23d Avatar asked Aug 05 '26 13:08

pre23d


2 Answers

You can use regex for this problem.

Explanation:

here in the expression portion .*? means to consider everything and whatever enclosed in \b(expr)\b needs to be present there mandatorily.

For e.g.:

import re

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

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

OUTPUT:

['https://website.tv/live/streamidXXXXXXXXX.m3u8']
like image 143
Hussain Avatar answered Aug 08 '26 14:08

Hussain


There are a few ways to go about this, one that springs to mind which others have touched upon is using regex with findall that returns back a list of matched urls from our url_list.

Another option could also be BeautifulSoup but without more information regarding the html structure it may not be the best tool here.

Using 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")
like image 34
David S Avatar answered Aug 08 '26 14:08

David S



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!