首页 > 解决方案 > 使用python从html中提取<和>

问题描述

我有一个 UTF-8 编码的 HTML,如下所示。我想使用 python 和 bs4 从中提取 OWNER、NVCODE、CKHEWAT 标签。但是 <> 被转换为 < 和 > 我无法从 OWNER、NVCODE、CKHEWAT 标签中提取文本。

请指导我从这些标签中提取文本。

<?xml version="1.0" encoding="utf-8"?><html><body><string xmlns="http://tempuri.org/">&lt;root&gt;&lt;OWNER&gt;अराजी मतरुका   वासीदेह &lt;/OWNER&gt;&lt;NVCODE&gt;00108&lt;/NVCODE&gt;&lt;CKHEWAT&gt;811&lt;/CKHEWAT&gt;&lt;/root&gt;</string></body></html>

我的代码

response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml")
soup.find('string').text

标签: htmlpython-3.xbeautifulsoup

解决方案


检查这个

默认情况下,唯一在输出时转义的字符是裸 & 和尖括号。这些会变成“&”、“<”和“>”,这样 Beautiful Soup 就不会无意中生成无效的 HTML 或 XML:

soup = BeautifulSoup("<p>The law firm of Dewey, Cheatem, & Howe</p>")
soup.p
# <p>The law firm of Dewey, Cheatem, &amp; Howe</p>

soup = BeautifulSoup('<a href="http://example.com/?foo=val1&bar=val2">A link</a>')
soup.a
# <a href="http://example.com/?foo=val1&amp;bar=val2">A link</a>

您可以通过为 prettify()、encode() 或 decode() 的 formatter 参数提供一个值来更改此行为。Beautiful Soup 为格式化程序识别六个可能的值。

默认值为格式化程序 =“最小”。字符串只会被处理到足以确保 Beautiful Soup 生成有效的 HTML/XML:

french = "<p>Il a dit &lt;&lt;Sacr&eacute; bleu!&gt;&gt;</p>"
soup = BeautifulSoup(french)
print(soup.prettify(formatter="minimal"))
# <html>
#  <body>
#   <p>
#    Il a dit &lt;&lt;Sacré bleu!&gt;&gt;
#   </p>
#  </body>
# </html>

推荐阅读