BeautifulSoup编码

Beautiful Soup编码

Beautiful Soup编码

  字符编码在解释 HTML 和 XML 文档的内容中起着重要作用。文档不仅包含英文字符,还包含非英文字符,如希伯来文、拉丁文、希腊文等等。为了让解析器知道应该使用哪种编码方法,文档将包含一个专用标签和属性来指定它。例如:

Beautiful Soup编码

  在 HTML 文档中

<meta charset=”–encoding method name–” content=”text/html”>

  在 HTML 文档中编码标签

  在 XML 文档中

<?xml version=”1.0″encoding=”–encoding method name–“?>

  在 XML 文档中编码标签

  这些标签传达了浏览器可以使用哪种编码方法进行解析。如果未指定正确的编码方法,则内容呈现不正确或有时带有替换字符“ ”。本文,我们晓得博客为你介绍Beautiful Soup编码。

Beautiful Soup编码

  BeautifulSoup 模块,导入为 bs4,使 HTML/XML 解析变得轻而易举。有很多方法,包括通过标签名称或标签中存在的属性来选择内容,基于层次结构提取内容,打印 HTML 所需的缩进内容等。bs4 模块自动检测文档中使用的编码方法,并有效地将其转换为合适的格式。

  推荐:Beautiful Soup 遍历文档树

original_encoding

  bs4 模块有一个名为 Unicode 的子库 Dammit,它可以找到编码方法并使用它来转换为 Unicode 字符。original_encoding 属性用于返回检测到的编码方式。 

  Beautiful Soup编码 示例 1:给定一个 HTML 元素,解析它并找到使用的编码方法。

from bs4 import BeautifulSoup


h1 = b"<h1>Hello!Enfold Tutorial</h1>"
parsed = BeautifulSoup(h1, "html.parser")


print("Tag foud :", parsed.h1.name)
print("Content :", parsed.h1.string)
print("Encoding method :", parsed.original_encoding)

  输出:

Tag foud : h1
Content : Hello!Enfold Tutorial
Encoding method : ascii

  此处,HTML 元素字符串以“ b ”为前缀,这意味着将其视为字节文字。因此,解析器检测并使用 ASCII 编码方法。在实际情况下,原始编码将是 HTML 文档中提到的编码

  Beautiful Soup编码 示例: 给定一个 URL,解析内容并找到原始编码方法。

Beautifusoup解析内容并找到原始编码
from bs4 import BeautifulSoup
import requests

URL = 'https://www.pythonthree.com/python_basic/beautiful-soup-tutorial/'
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")

print("Encoded method :", soup.original_encoding)

  输出

Enoded method : utf-8
from_encoding
Beautifusoup使用from-encoding解析内容原始编码

  这是一个可以传递给构造函数 BeautifulSoup() 的参数。这明确地告诉 bs4 模块,必须使用哪种编码方法。这可以节省时间并避免由于错误预测而导致的错误解析。

  Beautiful Soup编码 示例 ,但内容实际上对应于“ ISO-8859-8 ”并且解释的字符不是所需的字符。因此,通过明确提及已知的编码方法,将给出正确的输出。

input = b"<h1>\xa2\xf6`\xe0</h1>"

# parsing content
soup = BeautifulSoup(input, "html.parser", from_encoding="iso-8859-8")

print("Content :",soup.h1.string)

print("Encoding method :",soup.original_encoding)

  输出:

Content : ¢צ`א
Encoding method : iso-8859-8
exclude_encoding

  BeautifulSoup 4.4.0 添加的另一个新功能是 exclude_encoding。当您不知道正确的编码但确定 Unicode 时,可以使用它。

soup = BeautifulSoup(markup, exclude_encodings=["ISO-8859-7"])

  推荐:使用 BeautifulSoup 从HTML中提取 JSON

输出编码

  通过Beautiful Soup输出文档时,不管输入文档是什么编码方式,输出编码均为UTF-8编码

from bs4 import BeautifulSoup

# HTML element
input = b'''<html>
<meta charset="iso-8859-8"/>
<body>
<h1>\xa2\xf6`\xe0</h1>
</body>
</html>'''

# parsing content
soup = BeautifulSoup(input,"html.parser")

print(soup.prettify("iso-8859-8"))

  输出:

b'<html>\n <meta charset="iso-8859-8"/>\n <body>\n <h1>\n \xa2\xf6`\xe0\n </h1>\n </body >\n</html>'

  如果您不希望以 UTF-8 格式生成输出,您可以在 prettify() 中指定所需的编码,prettify() 方法用于打印具有正确缩进的 HTML 内容。

Beautifusoup使用prettify方法输出内容
from bs4 import BeautifulSoup

# HTML element
input = b"<html><head></head><body><h1>\xa2\xf6`\xe0</h1></body></html>"

# parsing content
soup = BeautifulSoup(input)

print("Content :",soup.h1.string)

print("Encoding method :",soup.original_encoding)

print("After explicit encoding :",soup.html.encode("iso-8859-8"))

  输出:

Content : ¢ö`à
Encoding method : ISO-8859-1
After explicit encoding : b'<html><head></head><body><h1>\xa2&#246;`&#224;</h1></body></html>'

总结

  以上是晓得博客为你介绍的 BeautifulSoup编码的全部内容,如有问题,欢迎留言讨论。

  推荐:Beautiful Soup教程

给文章评分

晓得博客,版权所有丨如未注明,均为原创
晓得博客 » Beautiful Soup编码

转载请保留链接:https://www.pythonthree.com/encoding-in-beautifulsoup/

ThemeForest 模板套件
可视化创建WordPress网站

发表评论

您的电子邮箱地址不会被公开。

Scroll to Top