Извлечь IP-адрес из HTML-строки (Python) - PullRequest
23 голосов
/ 23 мая 2010

Мои друзья,

Я действительно хочу извлечь простой IP-адрес из строки (фактически однострочный html), используя Python.Но оказывается, что прошло 2 часа, но я все еще не смог найти хорошее решение.

>>> s = "<html><head><title>Current IP Check</title></head><body>Current IP Address: 165.91.15.131</body></html>"

- «165.91.15.131» - это то, что я хочу!

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

>>> import re
>>> ip = re.findall( r'([0-9]+)(?:\.[0-9]+){3}', s )
>>> ip
['165']

На самом деле, я не чувствую, что у меня есть четкое представление о reg-выражении, и вышеуказанный код был найден и изменен изв другом месте в Интернете.

Ищите свой вклад и идеи!

Ответы [ 6 ]

50 голосов
/ 23 мая 2010

Удалить вашу группу захвата:

ip = re.findall( r'[0-9]+(?:\.[0-9]+){3}', s )

Результат:

['165.91.15.131']

Примечания:

  • Если вы анализируете HTML, возможно, стоит посмотреть на BeautifulSoup .
  • Ваше регулярное выражение соответствует некоторым недопустимым IP-адресам, таким как 0.00.999.9999. Это не обязательно проблема, но вы должны знать об этом и, возможно, справиться с этой ситуацией. Вы можете изменить + на {1,3} для частичного исправления без чрезмерной сложности регулярного выражения.
6 голосов
/ 23 мая 2010

Вы можете использовать следующее регулярное выражение для захвата только действительных IP-адресов

re.findall(r'\b25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\b',s)

возвращает

['165', '91', '15', '131']
4 голосов
/ 07 января 2013
import re

ipPattern = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')

findIP = re.findall(ipPattern,s)

findIP contains ['165.91.15.131']
2 голосов
/ 13 марта 2018

Вы можете использовать следующее регулярное выражение для извлечения действительного IP без следующих ошибок
1. Некоторые обнаружены 123.456.789.111 как действительный IP
2. Некоторые не определяют 127.0.00.1 как действительный IP
3. Некоторые не обнаруживают IP-адреса, начинающиеся с нуля, например 08.8.8.8

Так что здесь я публикую регулярное выражение, которое работает на всех вышеперечисленных условиях.

Примечание: я извлек более 2 миллионов IP без каких-либо проблем со следующим регулярным выражением.

(?:(?:1\d\d|2[0-5][0-5]|2[0-4]\d|0?[1-9]\d|0?0?\d)\.){3}(?:1\d\d|2[0-5][0-5]|2[0-4]\d|0?[1-9]\d|0?0?\d)
2 голосов
/ 17 августа 2015

Самый простой способ найти IP-адрес из журнала.

 s = "<html><head><title>Current IP Check</title></head><body>Current IP Address: 165.91.15.131</body></html>"
 info = re.findall(r'[\d.-]+', s)

В [42]: информация

Out [42]: ['165.91.15.131']

1 голос
/ 21 января 2013

Вот как я это сделал. Я думаю, что это так чисто

import re
import urllib2

def getIP():
    ip_checker_url = "http://checkip.dyndns.org/"
    address_regexp = re.compile ('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
    response = urllib2.urlopen(ip_checker_url).read()
    result = address_regexp.search(response)

    if result:
            return result.group()
    else:
            return None

get_IP () возвращает ip в строку или None

Вы можете заменить address_regexp другими регулярными выражениями, если вы предпочитаете более точный анализ или, возможно, смените поставщика веб-услуг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...