Найти все IP-адреса на странице HTML - PullRequest
0 голосов
/ 01 мая 2009

Я хочу получить HTML-страницу с python, а затем распечатать все IP-адреса с нее. Я определю IP как следующее:

х 1005 * х 1007 * х 1009 * х :... у

Где: х = число от 0 до 256. у = число с <7 цифрами. </p>

Спасибо.

Ответы [ 5 ]

3 голосов
/ 01 мая 2009

правый. Единственная часть, которую я не могу сделать - это регулярное выражение. - das 9 минут назад Если кто-то покажет мне это, я буду в порядке. - дас 8 минут назад

import re

ip = re.compile(r"\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?):\d{1,6}\b")
junk = " 1.1.1.1:123 2.2.2.2:321 312.123.1.12:123 "
print ip.findall(junk)

# outputs ['1.1.1.1:123', '2.2.2.2:321']

Вот полный пример:

import re, urllib2

f = urllib2.urlopen("http://www.samair.ru/proxy/ip-address-01.htm")
junk = f.read()

ip = re.compile(r"\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?):\d{1,6}\b")
print ip.findall(junk)

# ['114.30.47.10:80', '118.228.148.83:80', '119.70.40.101:8080', '12.47.164.114:8888', '121.
# 17.161.114:3128', '122.152.183.103:80', '122.224.171.91:3128', '123.234.32.27:8080', '124.
# 107.85.115:80', '124.247.222.66:6588', '125.76.228.201:808', '128.112.139.75:3128', '128.2
# 08.004.197:3128', '128.233.252.11:3124', '128.233.252.12:3124']
1 голос
/ 01 мая 2009

Основной подход будет:

  • Используйте urllib2 для загрузки содержимого страницы
  • Используйте регулярное выражение для извлечения IPv4-подобных адресов
  • Проверка каждого соответствия в соответствии с числовыми ограничениями для каждого октета
  • Распечатать список матчей

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

0 голосов
/ 30 августа 2012

В действии :

\b(?:                # A.B.C in A.B.C.D:port
    (?:
       25[0-5]
    |  2[0-4][0-9]
    |  1[0-9][0-9]
    |  [1-9]?[0-9]
    )\.
  ){3}
  (?:                # D in A.B.C.D:port
    25[0-5]
  | 2[0-4][0-9]
  | 1[0-9][0-9]
  | [1-9]?[0-9]
  )
  :[1-9]\d{0,5}     # port number any number in (0,999999]
\b
0 голосов
/ 01 мая 2009

Не для того, чтобы превратить это в войну "кто лучше", но ...

(\d{1,3}\.){3}\d{1,3}\:\d{1,6}
0 голосов
/ 01 мая 2009

Попробуйте:

re.compile("\d?\d?\d.\d?\d?\d.\d?\d?\d.\d?\d?\d:\d+").findall(urllib2.urlopen(url).read())
...