Home > Net >  how to check in python if array includes an url
how to check in python if array includes an url

Time:08-19

is there a way in python to check, if an element of an array contains a url? The output recognizes for the different elements of the array if it is a hyperlink or not and highlights it. the only way i can think of is to check if the array entry contains a "www". But also links like "google.com" should be recognized.

CodePudding user response:

Unless you want to do something like:

urls = ["www.google.com", "not a url", "etc.com", "lol"]
for url in urls:
    if "www" in url or "http" in url or "https" in url or ".com" in url:
    # the list could go on
        print(f"{url} is a url!")
    else:
        print(f"{url} is not a url :(")

you could probably do it a more efficient way by trying to ping the url - like so:

SO Post with pyping and usage: https://stackoverflow.com/a/33018614/3155240

pip install pyping

import pyping as p

urls = ["www.google.com", "not a url", "etc.com", "lol"]
for url in urls:
    r = p.ping(url)

    if r.ret_code == 0:
        print(f"{url} is a url!")
    else:
        print(f"{url} is not a url :(")

EDIT: I couldn't get the pyping package to work, but with the same concept on the previously mentioned SO Post, you could use a ping function like so (link to answer - https://stackoverflow.com/a/32684938/3155240):

import platform    # For getting the operating system name
import subprocess  # For executing a shell command

def ping(host):
    """
    Returns True if host (str) responds to a ping request.
    Remember that a host may not respond to a ping (ICMP) request even if the host name is valid.
    """

    # Option for the number of packets as a function of
    param = '-n' if platform.system().lower()=='windows' else '-c'

    # Building the command. Ex: "ping -c 1 google.com"
    command = ['ping', param, '1', host]

    return subprocess.call(command) == 0

Working implementation of the above ping function:

urls = ["www.google.com", "not a url", "etc.com", "lol"]
for url in urls:
    r = ping(url)

    if r:
        print(f"{url} is a url!")
    else:
        print(f"{url} is not a url :(")

EDIT: I didn't like his ping function - here's mine.

import subprocess
import platform

def ping(url):
    param = "-n" if platform.system().lower() == "windows" else "-c"
    command = ["ping", param, "1", url]
    try:
        res = subprocess.check_output(command)
    except subprocess.CalledProcessError:
        return False
    else:
        return True
  • Related