我写了一个Python脚本来处理大量下载的网页HTML(120K页)。 我需要解析它们并从中提取一些信息。 我尝试过使用BeautifulSoup,它很容易和直观,但是它运行起来非常慢。由于这是某些将在Amazon上在一台弱小的机器上定期运行的内容,速度很重要。 在Python中是否有比BeautifulSoup更快的HTML/XML解析器?或者我必须采用正则表达式解析...
lxml是一个快速的XML和HTML解析器:http://lxml.de/parsing.html
注:该段内容无需翻译。
pip install lxml
- Flimm流式解析器(或SAX-style解析器)可能比DOM-style解析器更快。代码一次只传递一个元素,因为它们在文档中出现,尽管你必须自己推断(并跟踪)它们的关系,但你只需要维护足够定位所需数据的状态。作为奖励,一旦你找到感兴趣的内容,你可以提前终止解析,节省处理余下文档所需的时间。
相比之下,DOM-style解析器需要构建完整的可导航对象模型,在这个过程中需要时间(和内存)。DOM-style解析器通常是基于流式解析器构建的,因此它们将比使用的流式解析器慢。
Python有一个名为html.parser
的HTML流式解析器。根据你想要提取的数据有多难识别,实际上编写一个流式解析器进行网络爬虫可能会很复杂,因为API与你习惯思考文档的方式不同。因此,即使运行时较慢,选择易于使用的解析器也可能值得,因为简单的工作代码通常比带有错误的复杂代码更好。
然而,用C语言编写的解析器(如lxml
)无论采用何种方法,都能比使用纯Python编写的解析器更快速地处理数据,这也许是您获得所需速度的一种方式。实际上,现在的BeautifulSoup已将lxml
作为其默认解析器。
尝试一下:ElementTree可能会更快,但我不确定。
xml.etree.ElementTree import ElementTree