一个快速的python HTML解析器[关闭]
Posted
技术标签:
【中文标题】一个快速的python HTML解析器[关闭]【英文标题】:A fast python HTML parser [closed] 【发布时间】:2012-03-29 01:57:23 【问题描述】:我编写了一个处理大量下载网页 html(120K 页)的 python 脚本。我需要解析它们并从那里提取一些信息。我尝试使用 BeautifulSoup,它既简单又直观,但运行起来似乎超级慢。因为这是必须在弱机器(亚马逊)上定期运行的东西,所以速度很重要。 python中是否有一个比BeautifulSoup运行得更快的HTML/XML解析器?还是我必须求助于正则表达式解析..
【问题讨论】:
Keep the pony away... 我没有在 Python 中解析 HTML 的经验,但 here 是一些您可能会觉得有用的基准测试结果。 regex and HTML == failure 解析任务到底是什么? @JackManey - 哇。在此之后我绝对不会用正则表达式解析 HTML... 【参考方案1】:尝试:ElementTree 可能会更快,但我不确定。
xml.etree.ElementTree import ElementTree
【讨论】:
我也打算提出这个建议......虽然,我没有任何数据来支持它与 BeautifulSoup 的性能比 这里有一个基准测试。 medium.com/@vikoky/…【参考方案2】:lxml 是一个快速的 xml 和 html 解析器:http://lxml.de/parsing.html
【讨论】:
谢谢,基准测试确实表明 lxml 更快! 安装:pip install lxml
【参考方案3】:
流式(或SAX-style)解析器可以比 DOM 样式的解析器更快。您的代码在文档中出现时一次传递一个元素,尽管您必须自己推断(并跟踪)它们的关系,但您只需要维护定位所需数据所需的尽可能多的状态。作为奖励,一旦您找到了您感兴趣的内容,您可以提前终止解析,从而节省处理文档其余部分所需的时间。
相比之下,DOM 风格的解析器需要为整个文档构建一个完整的可导航对象模型,这需要时间(和内存)。 DOM 样式的解析器通常构建在流解析器之上,因此它们在同等条件下会比它们使用的流解析器慢。
Python 有一个名为 html.parser
的 HTML 流解析器。根据识别要提取的数据的难度,实际编写流式解析器进行抓取可能会很复杂,因为 API 与您习惯于思考文档的方式完全不同。因此,即使运行时速度较慢,也可能值得选择一个更易于使用的解析器,因为简单的代码通常比有错误的复杂代码更好。
在the gripping hand 上,用 C 编写的解析器(例如 lxml
)几乎可以击败任何用纯 Python 编写的解析器,不管它采用什么方法,所以这可能是一种方法获得您需要的速度。 (事实上,如今 BeautifulSoup 使用 lxml
作为其默认解析器。)
【讨论】:
以上是关于一个快速的python HTML解析器[关闭]的主要内容,如果未能解决你的问题,请参考以下文章