BeautifulSoup的输出

格式化输出

BeautifulSoup中有内置的方法prettfy()来实现格式化输出。比如:

from bs4 import BeautifulSoup  

html_markup = """<p class="ecopyramid"> 
<ul id="producers"> 
<li class="producerlist"> 
<div class="name">plants</div> 
<div class="number">100000</div> 
</li> 
<li class="producerlist"> 
<div class="name">algae</div> 
Output in Beautiful Soup 
<div class="number">100000</div> 
</li> 
</ul>"""  
soup = BeautifulSoup(html_markup,"lxml")  
print(soup.prettify())  

prettify()可以用于BeautifulSoup对象也可以用于任何标签对象。比如:

producer_entry = soup.ul  
print(producer_entry.prettify())  

非格式化输出

可以使用str()和unicode()来进行非格式化输出。
如果我们对BeautifulSoup对象和标签对象使用str()方法,那么得到的就是一般的字符串输出样式。
我们也可以使用前篇讲到的encode()方法来指定编码格式的输出。
对BeautifulSoup对象或标签对象使用decode()方法来得到Unicode字符串。

带参数的格式化输出

HTML实体编码可以放进HTML文档中用来表示特别的字符和标识。这些标识不存在于键盘上,这些HTML实体编码只是当浏览器打开后才回看到效果。
在输出方法中,只有这几个HTML编码有点例外。>和<和&三个符号。除此之外其他的特别标识都是被转换成Unicode编码当创建BeautifulSoup对象时,且当使用Prettify()方法或者其他方法输出时,我们只能得到UTF-8格式的字符串。

html_markup = """<html>
<body>& &amp; ampersand
¢ &cent; cent
© &copy; copyright
÷ &divide; divide
> &gt; greater than
</body>
</html>

输出:

可以看到两个没有被转换。BeautifulSoup自带的输出格式器来控制输出。输出格式器有以下几种类型。

  • miimal
  • html
  • None
  • function

我们可以在输出方法中传递上述输出格式器参数,如prettify(),ncode(),decode()

miimal格式化

在这种格式化模式下,字符串被处理成一个有效的HTML代码。这是默认的格式化输出,此时输出结果就和前面的一样。不能转换

&amp;, &gt;和&lt;

Html格式化

这种格式化模式下,BeautifulSoup将会将Unicode字符转换成HTML编码形式。

print(soup.prettify(formatter="html"))

输出:

None格式化

这种情况下,BeautifulSoup不会改变字符串。这会导致产生一个非法的HTML代码。

print(soup.prettify(formatter=None))  

输出:

函数格式化

我们可以定义一个函数来处理字符串。比如去掉a字符。

def remove_chara(markup):  
    return markup.replace("a","")  

soup = BeautifulSoup(html_markup,"lxml")  
print(soup.prettify(formatter=remove_chara))  

输出:

注意,其中字符a被替换掉了,但是注意的是

&amp;, &gt;,和&lt;

也被转换了。

使用get_text()

从网页中得到文本是常见的工作,BeautifulSoup提供了get_text()方法来达到目的。

如果我们只想得到BeautifulSoup对象的文本或标签对象的文本内容,我们可以使用get_text()方法。比如:

html_markup = """<p class="ecopyramid"> 
<ul id="producers"> 
<li class="producerlist"> 
<div class="name">plants</div> 
<div class="number">100000</div> 
</li> 
<li class="producerlist"> 
<div class="name">algae</div> 
<div class="number">100000</div> 
</li> 
</ul>"""  
soup = BeautifulSoup(html_markup,"lxml")  
print(soup.get_text())  

输出:
plants
100000

algae
100000

get_text()方法返回BeautifulSoup对象或标签对象中的文本内容,其为一个Unicode字符串。但是get_text()有个问题是它同样也会返回javascript代码。

去掉javascript代码的方法如下:

[x.extract() for x in soup_packtpage.find_all('script')]  

这样就会用处掉所有脚本元素。

https://blog.csdn.net/abclixu123/article/details/39777701

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值