我正在编写一个简单的脚本以在终端中打印出我的IP地址。我无法从打印语句中删除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),但是却得到了以下内容
“
答案 0 :(得分:2)
您要尝试的操作不是一个困难的字符串操作问题,但是有一种更干净的方法可以使用其他服务来实现。一个是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'])
答案 1 :(得分:0)
如果您想使用正则表达式,则可以剥离正则表达式,而不是剥离标签,而只需匹配您想要使用括号的部分即可,这是一个示例:
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())