如何从 HTML 字符串中提取 IP 地址?
- 2025-04-10 09:44:00
- admin 原创
- 26
问题描述:
我想使用 Python 从字符串(实际上是一行 HTML)中提取 IP 地址。
>>> 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']
但是我对正则表达式没有很强的掌握;上述代码是从网上其他地方找到并修改的。
解决方案 1:
删除你的捕获组:
ip = re.findall( r'[0-9]+(?:.[0-9]+){3}', s )
结果:
['165.91.15.131']
笔记:
如果您正在解析 HTML,查看BeautifulSoup可能是个好主意。
您的正则表达式匹配了一些无效的 IP 地址,例如
0.00.999.9999
。这不一定是个问题,但您应该意识到这一点并尽可能处理这种情况。您可以将 更改+
为{1,3}
以进行部分修复,而不会使正则表达式过于复杂。
解决方案 2:
您可以使用以下正则表达式来仅捕获有效的 IP 地址
re.findall(r'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]?.25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?',s)
返回
['165', '91', '15', '131']
解决方案 3:
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']
解决方案 4:
您可以使用以下正则表达式来提取有效的 IP,而不会出现以下错误
1.有些被检测123.456.789.111
为有效 IP
2.有些没有检测127.0.00.1
为有效 IP
3.有些没有检测到以零开头的 IP,例如08.8.8.8
因此我在这里发布了一个适用于上述所有条件的正则表达式。
注意:我已经使用以下正则表达式提取了超过 200 万个 IP,没有任何问题。
(?:(?:1dd|2[0-5][0-5]|2[0-4]d|0?[1-9]d|0?0?d).){3}(?:1dd|2[0-5][0-5]|2[0-4]d|0?[1-9]d|0?0?d)
解决方案 5:
从日志中查找 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]: info
出[42]:['165.91.15.131']
解决方案 6:
我就是这样做的。我觉得这样很干净
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
如果您希望获得更准确的解析或者想要更改 Web 服务提供商,则可以将 address_regexp 替换为其他正则表达式。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD