我正在写一个简单的脚本打印出我的IP地址在终端。我在从print语句中删除HTML标记时遇到问题。
我尝试使用urllib库中的.strip()函数。我对正则表达式的理解不够,无法输入到这段代码中。
import re
import urllib.request, urllib.parse, urllib.error
import json
data = urllib.request.urlopen('http://checkip.dyndns.org')
for line in data:
print(line.decode().strip())
我希望输出仅为我的IP (xxx.xx.xx.xxx),但得到的结果如下所示
"< html>< head>< title>Current IP Check< /title>< /head>< body>Current IP Address: XXX.XX.XX.XXX< /body>< /html>“
发布于 2019-06-24 09:26:46
如果你想使用正则表达式,而不是剥离标签,你可以只使用括号匹配你感兴趣的部分,下面是一个例子:
import re
import urllib.request
data = urllib.request.urlopen('http://checkip.dyndns.org').read().decode()
print(re.search(r'Current IP Address: ([\d\.]+)', data).group(1))
您可以在https://docs.python.org/2/library/re.html#match-objects上找到更多信息和示例
要删除HTML标记,通常可以使用re:
print(re.sub('<[^<]+?>', '', '<html>foo</html>'))
或者更容易使用BeatufilSoup而不是re:
from bs4 import BeautifulSoup
print(BeautifulSoup('<html>foo</html>').get_text())
发布于 2019-06-24 09:07:27
您要做的并不是一个困难的字符串操作问题,但有一种更简洁的方法可以使用不同的服务来完成它。一个是ipify.org。
import json
from urllib import request
with request.urlopen('https://api.ipify.org?format=json') as response:
print(json.loads(response.read())['ip'])
https://stackoverflow.com/questions/56728598
复制相似问题