【问题标题】:How to remove HTML Tags in Python3如何在 Python3 中删除 HTML 标签
【发布时间】:2019-06-24 00:16:04
【问题描述】:

我正在编写一个简单的脚本来在终端中打印出我的 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"

【问题讨论】:

  • data中是否只有一行?
  • print(line.decode().strip().replace('Current IP CheckCurrent IP Address: ',''))
  • @LeeGarcon - 我相信数据中只有一行

标签: python html regex parsing urllib


【解决方案1】:

您尝试做的不是一个困难的字符串操作问题,但有一种更简洁的方法可以使用不同的服务来完成它。一个是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'])

【讨论】:

  • 这似乎确实可以使用 JSON。谢谢!是的,确实不难,我是新手。
  • 不客气!我的观点不是关于你的技能,而是一直支持并询问是否有可用的良好程序友好选项通常是一个很好的开始方式,但很容易被忽视。
【解决方案2】:

如果您想使用正则表达式,而不是剥离标签,您可以使用括号匹配您感兴趣的部分,这是一个示例:

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

【讨论】:

  • 这就是我要找的,谢谢!正则表达式解决方案效果很好。
猜你喜欢
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多