Как извлечь URL-адрес из строки с помощью python?

Например:

string = "This is a link http://www.google.com" 

Как я могу извлечь «http://www.google.com»?

(Каждая ссылка будет иметь тот же формат, что и «http: //»)

3 Solutions collect form web for “Как извлечь URL-адрес из строки с помощью python?”

Существует несколько способов сделать это, но самым чистым будет использование регулярного выражения

 >>> myString = "This is a link http://www.google.com" >>> print re.search("(?P<url>https?://[^\s]+)", myString).group("url") http://www.google.com 

Если может быть несколько ссылок, вы можете использовать что-то похожее ниже

 >>> myString = "These are the links http://www.google.com and http://stackoverflow.com/questions/839994/extracting-a-url-in-python" >>> print re.findall(r'(https?://[^\s]+)', myString) ['http://www.google.com', 'http://stackoverflow.com/questions/839994/extracting-a-url-in-python'] >>> 

Чтобы найти веб-URL в общей строке, вы можете использовать регулярное выражение (регулярное выражение) .

Для вашего случая должно быть простое регулярное выражение для URL-адреса, похожего на следующее.

  regex = r'(' # Scheme (HTTP, HTTPS, FTP and SFTP): regex += r'(?:(https?|s?ftp):\/\/)?' # www: regex += r'(?:www\.)?' regex += r'(' # Host and domain (including ccSLD): regex += r'(?:(?:[A-Z0-9][A-Z0-9-]{0,61}[A-Z0-9]\.)+)' # TLD: regex += r'([AZ]{2,6})' # IP Address: regex += r'|(?:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' regex += r')' # Port: regex += r'(?::(\d{1,5}))?' # Query path: regex += r'(?:(\/\S+)*)' regex += r')' 

Если вы хотите быть более точным, в разделе TLD вы должны убедиться, что TLD является действительным TLD (см. Полный список действительных TLD здесь: https://data.iana.org/TLD/tlds-alpha- by-domain.txt ):

  # TLD: regex += r'(com|net|org|eu|...)' 

Затем вы можете просто скомпилировать прежнее регулярное выражение и использовать его для поиска возможных совпадений:

  import re string = "This is a link http://www.google.com" find_urls_in_string = re.compile(regex, re.IGNORECASE) url = find_urls_in_string.search(string) if url is not None and url.group(0) is not None: print("URL parts: " + str(s.groups())) print("URL" + url.group(0).strip()) 

Который в случае строки «Это ссылка http://www.google.com » выводит:

  URL parts: ('http://www.google.com', 'http', 'google.com', 'com', None, None) URL: http://www.google.com 

Если вы измените ввод с более сложным URL-адресом, например «Это также URL-адрес https://www.host.domain.com:80/path/page.php?query=value&a2=v2#foo, но это не больше " выход будет:

  URL parts: ('https://www.host.domain.com:80/path/page.php?query=value&a2=v2#foo', 'https', 'host.domain.com', 'com', '80', '/path/page.php?query=value&a2=v2#foo') URL: https://www.host.domain.com:80/path/page.php?query=value&a2=v2#foo 

ПРИМЕЧАНИЕ. Если вы ищете больше URL-адресов в одной строке, вы все равно можете использовать одно и то же регулярное выражение, но просто используйте findall () вместо search () .

Существует другой способ, как легко извлекать URL-адреса из текста. Вы можете использовать urlextract, чтобы сделать это за вас, просто установите его через pip:

 pip install urlextract 

и тогда вы можете использовать его следующим образом:

 from urlextract import URLExtract extractor = URLExtract() urls = extractor.find_urls("Let's have URL stackoverflow.com as an example.") print(urls) # prints: ['stackoverflow.com'] 

Дополнительную информацию можно найти на моей странице github: https://github.com/lipoja/URLExtract

ПРИМЕЧАНИЕ. Он загружает список TLD из iana.org, чтобы поддерживать вас в курсе событий. Но если у программы нет доступа в Интернет, это не для вас.

  • Django urlpattern "не соответствует"
  • Есть ли функция для Python, которая похожа на getimagesize в PHP?
  • Лучший способ конвертировать URL-адрес Unicode в ASCII (UTF-8-escaped) в Python?
  • Добавить параметры в заданный URL в Python
  • заменить URL-адреса в тексте ссылками на URL-адреса
  • urlfetch перенаправлен в бесконечный цикл в python
  • Имя файла urllib2
  • Изменение компонентов URL в Python 2
  • Начать бэкэнд с помощью async urlfetch в Google App Engine
  • Как я могу запросить локальный url в приложении приложения для приложений?
  • Керлинг в Python и вывод в отдельные текстовые файлы
  •  
    Interesting Posts for Van-Lav

    Я пытаюсь сделать малиновую пи-камеру работать с opencv

    Как добавить массив numpy из N-Length в другой массив N-мер?

    Итерация по QuerySet Django при удалении объектов в том же QuerySet

    Вставка метки matplotlib inset_axis имеет метки меток, перекрывающие родительские оси

    На каких системах / файловых системах есть os.open () atomic?

    Получить текущую воспроизводимую дорожку

    Есть ли способ скопировать только структуру (а не данные) Pandas DataFrame?

    Как заставить словарь Python сжиматься?

    Симметричность N-Queens Нарушение Google OR Tools

    Python: изменение размера существующего массива и заполнение нулями

    Как подсчитать количество слов в предложении?

    Изменение пароля пользователя Windows с помощью python

    Где я должен разместить одноразовую операцию в рамках Django?

    Динамическое присоединение метода к существующему объекту Python, сгенерированному с помощью swig?

    pd.get_dummies () медленно на больших уровнях

    Python - лучший язык программирования в мире.