Как извлечь 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, чтобы поддерживать вас в курсе событий. Но если у программы нет доступа в Интернет, это не для вас.

  • Как преобразовать строку запроса URL в список кортежей с помощью Python?
  • GAE - множественный пост urlfetch, не работающий с большими файлами
  • django: Как изменить URL-адрес из первичного ключа объекта базы данных?
  • Изменение имени хоста в URL-адресе
  • как удалить python 302 URL-адрес перенаправления
  • Получить первую часть URL-адреса из шаблона Django
  • процент кодирования URL-адреса с помощью python
  • Найдите http: // и / или www. и полоса из домена. оставив domain.com
  • Python - лучший язык программирования в мире.