Beautiful Soup编码
字符编码在解释 HTML 和 XML 文档的内容中起着重要作用。文档不仅包含英文字符,还包含非英文字符,如希伯来文、拉丁文、希腊文等等。为了让解析器知道应该使用哪种编码方法,文档将包含一个专用标签和属性来指定它。例如:
在 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 模块自动检测文档中使用的编码方法,并有效地将其转换为合适的格式。
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,解析内容并找到原始编码方法。
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
这是一个可以传递给构造函数 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 内容。
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ö`à</h1></body></html>'
总结
以上是晓得博客为你介绍的 BeautifulSoup编码的全部内容,如有问题,欢迎留言讨论。
Claude、Netflix、Midjourney、ChatGPT Plus、PS、Disney、Youtube、Office 365、多邻国Plus账号购买,ChatGPT API购买,优惠码XDBK,用户购买的时候输入优惠码可以打95折