BeautifulSoup> prettify()方法仅在一行中显示整个输出

时间:2018-10-01 11:26:09

标签: beautifulsoup python-3.4

这是我在stackoverflow.com上的第一篇文章,我有一个疑问,我的Python3程序在PyDev-for-Eclipse控制台中显示的输出

我正在使用: Python 3.4- PyDev-for-Eclipse- Python模块:request,bs4,pprint

只要我运行下面的代码,

html_content = response.content
bs = BS(html_content,'html.parser')
page_html = bs.prettify(encoding='utf-8')
print(page_html)

整个输出单独显示在一行中,如下所示,而不是以漂亮的打印格式显示

b'<!DOCTYPE doctype html>\n<html class="no-js" lang="en-US">\n <head>\n  <meta charset="utf-8"/> ...<entire output>...

我还尝试了pprint模块中的pprint()方法。但是,我得到了相同的结果,即整个输出仅显示在一行中

如何使o / p以漂亮的打印格式显示?

谢谢, skambl

1 个答案:

答案 0 :(得分:0)

指定encoding参数时,是在要求它对输出进行编码。这为您提供了一个bytes对象,该对象可以在打印字符串之前的前导b识别。 b'some value'打印到控制台意味着您打印了bytes对象(在python 3中)。

选项1

print(page_html.decode('utf-8'))

由于您要求将其编码为utf-8,因此应decode进行编码。

选项2

似乎您实际上想要一个字符串(而不是bytes对象)。所以就做

page_html = bs.prettify()  # no encoding parameter

另外,您可能需要阅读Output formatters上的部分,以了解更多可用于输出的内容。

我知道您很久以前问过这个问题,但是希望答案仍然有用(特别是,知道前导b'...'bytes对象,并且您需要decode那)!我正在搜索与bs4相关的内容,但偶然发现了这一点,以为我会解释为什么您会看到这种行为:)