如何在Python3中删除HTML标签

时间:2019-06-24 00:16:04

标签: python html regex parsing urllib

我正在编写一个简单的脚本以在终端中打印出我的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),但是却得到了以下内容

当前IP检查 当前IP地址:XXX.XX.XX.XXX ”

2 个答案:

答案 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())