使用python3,从html str中提取所有<div>块的最快方法是什么?

时间:2016-08-25 21:39:15

标签: python html regex parsing

<div>块内有<div>个内部块, 从html str中提取所有<div>块的最快方法是什么? (bs4,lxml还是正则表达式?)

2 个答案:

答案 0 :(得分:2)

lxml通常被认为是现有Python解析器中最快的,但解析速度取决于多个因素,从特定的HTML开始解析并以您可用的计算能力结束。对于HTML解析,请使用lxml.html子包:

from lxml.html import fromstring, tostring

data = """my HTML string"""
root = fromstring(data)

print([tostring(div) for div in root.xpath(".//div")]) 
print([div.text_content() for div in root.xpath(".//div")]) 

还有一个很棒的BeautifulSoup解析器,if allowed to use lxml under-the-hood,它将是方便性,灵活性和速度的完美结合。它通常不会比纯lxml更快,但它带有我见过的最好的API之一,允许您从不同的角度“查看”XML / HTML并使用各种各样的技术: / p>

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, "lxml")
print([str(div) for div in soup.find_all("div")])
print([div.get_text() for div in soup.find_all("div")])

并且,我个人认为,当正则表达式适合HTML解析时,很少有

答案 1 :(得分:0)

当我用Python教授XML / HTML解析时,我用它来表示这种复杂程度:

  1. RegEx:有效(非常)简单的解析,但可能/难以维护。
  2. SAX:高效且安全地将XML解析为流。当你想要转换树时,很容易提取数据,但很糟糕。可能变得非常难以维护。谁还在使用呢?
  3. 使用 lxml 进行DOM解析或ElementTree解析:效率较低:所有XML树都加载到内存中(可能是大XML的问题)。但是这个库是编译的(在Cython中)。非常受欢迎和可靠。易于理解:代码可以维护。
  4. XSLT1也是可能的。很好地深入改造树。但由于模板机械效率不高。需要学习一门似乎难以学习的新语言。维护经常变得沉重。请注意, lxml 可以使用Python函数作为扩展来执行XSLT。
  5. XSLT2非常强大,但我所知道的唯一实现是使用Saxon的Java语言。启动JRE非常耗时。这种语言很难学。需要成为专家才能理解每一个细微之处。更糟糕的是XSLT1。
  6. 对于您的问题, lxml (或 BeautifulSoup )听起来不错。