【发布时间】:2013-12-26 04:18:12
【问题描述】:
我有一个用于清理抓取的 html 内容的 python 脚本,它使用 BeautifulSoup4 并且运行良好。最近我决定学习 lxml,但我发现这些教程(对我来说)更难遵循。例如,我使用以下代码将多个<br /> 标签合并为一个,即如果有多个<br /> 标签,则删除所有标签,只保留一个:
from bs4 import BeautifulSoup, Tag
data = 'foo<br /><br>bar. <p>foo<br/><br id="1"><br/>bar'
soup = BeautifulSoup(data)
for br in soup.find_all("br"):
while isinstance(br.next_sibling, Tag) and br.next_sibling.name == 'br':
br.next_sibling.extract()
print soup
<html><body><p>foo<br/>bar. </p><p>foo<br/>bar</p></body></html>
我如何在 lxml 中实现这一点?谢谢,
【问题讨论】:
-
如果安装了
lxml,那么BeautifulSoup会将其静默(可能有害)用作解析器。 -
这让我很困惑:我听说lxml比bs4快,按照你的说法,只要我安装了lxml,即使我使用bs4我也不会失去速度?
-
唯一重要的基准是您的代码。测量它:在未安装 lxml 的 virtualenv 中运行(
import lxml必须失败),然后在安装 lxml 的 virtualenv 中运行(您也可以显式指定解析器)。