在HTML页面上查找所有IP地址

0 投票
5 回答
982 浏览
提问于 2025-04-15 11:20

我想用Python获取一个HTML页面,然后把里面所有的IP地址打印出来。

我定义的IP地址格式是这样的:

x.x.x.x:y

其中: x = 一个在0到256之间的数字。 y = 一个少于7位的数字。

谢谢。

5 个回答

1

基本的方法是:

  • 使用 urllib2 来下载网页的内容
  • 正则表达式 来提取看起来像IPv4地址的内容
  • 根据每个部分的数字限制来验证每个匹配项
  • 打印出所有匹配的结果

请更清楚地说明你具体遇到什么问题,并提供一些你已经尝试过的证据。

1

我不想把这个变成一个谁更会写正则表达式的争论,但...

(\d{1,3}\.){3}\d{1,3}\:\d{1,6}
3

没错。我唯一做不了的就是正则表达式那部分。– das 9分钟前 如果有人能给我演示一下,我就没问题了。– das 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']

撰写回答