爬虫系列13.BeautifulSoup 输出

来源:互联网 发布:方圆软件破解版 编辑:程序博客网 时间:2024/05/19 14:00
格式化输出 prettify()方法,将文档树格式化以后以Unicode码输出,每个标签都独占一行 BeautifulSoup 对象和它的tag节点都可以调用 prettify() 方法压缩输出 如果只想得到结果字符串,不重视格式,那么可以对一个 BeautifulSoup 对象或 Tag 对象使用Python的 unicode() 或 str() 方法 str() 方法返回UTF-8编码的字符串,可以指定 编码 的设置. 还可以调用 encode() 方法获得字节码或调用 decode() 方法获得Unicode.get_text() 方法 如果只想得到tag中包含的文本内容,可以用 get_text() 方法 这个方法获取到tag中包含的所有文本内容包括子孙tag中的内容,并将结果作为Unicode字符串返回 可以通过参数指定tag的文本内容的分隔符,还可以去除获得文本内容的前后空白: markup = '\nI linked to example.com\n' soup = BeautifulSoup(markup) soup.get_text("|", strip=True) u'I linked to|example.com'编码: 任何HTML或XML文档都有自己的编码方式,比如ASCII 或 UTF-8,但是使用Beautiful Soup解析后,文档都被转换成了Unicode。 BeautifulSoup 对象的 .original_encoding 属性记录了自动识别编码的结果, 用来识别用了什么编码方式。 通过传入 from_encoding 参数来指定编码方式: soup = BeautifulSoup(markup, from_encoding="iso-8859-8") 可以把错误编码作为 exclude_encodings 参数, 这样文档就不会尝试使用这种编码了解码了. 译者备注: 在没有指定编码的情况下, BS会自己猜测编码, 把不正确的编码排除掉, BS就更容易猜到正确编码. soup = BeautifulSoup(markup, exclude_encodings=["ISO-8859-7"])通过Beautiful Soup输出文档时,不管输入文档是什么编码方式,输出编码均为UTF-8编码 如果不想用UTF-8编码输出,可以将编码方式传入 prettify() 方法: print(soup.prettify("latin-1")) 还可以调用 BeautifulSoup 对象或任意节点的 encode() 方法,就像Python的字符串调用 encode() 方法一样: soup.p.encode("latin-1")UnicodeDammit 是BS内置库, 主要用来猜测文档编码. 编码自动检测 功能可以在Beautiful Soup以外使用,检测某段未知编码时,可以使用这个方法: from bs4 import UnicodeDammit dammit = UnicodeDammit("Sacr\xc3\xa9 bleu!") print(dammit.unicode_markup) # Sacré bleu! dammit.original_encoding # 'utf-8' 如果Python中安装了 chardet 或 cchardet 那么编码检测功能的准确率将大大提高. 输入的字符越多,检测结果越精确,如果事先猜测到一些可能编码, 那么可以将猜测的编码作为参数,这样将优先检测这些编码: dammit = UnicodeDammit("Sacr\xe9 bleu!", ["latin-1", "iso-8859-1"]) print(dammit.unicode_markup) # Sacré bleu! dammit.original_encoding # 'latin-1'