使用PHP(XPath)、PHP/Python(正则)或Python(XPath)提取HTML信息

1 投票
3 回答
1642 浏览
提问于 2025-04-15 15:00

我有大约4万多个HTML文档需要提取信息。我尝试过使用PHP和Tidy(因为大多数文件格式不太规范)结合DOMDocument和XPath来处理,但速度非常慢……有人建议我使用正则表达式,但这些HTML文件的结构很混乱(都是基于表格的布局,标签和类名没有任何意义),我不知道该从哪里入手……

我只是好奇,使用正则表达式(PHP/Python)会比使用Python的XPath库快吗?Python的XPath库一般比PHP的快吗?

3 个回答

0

之前的帖子提到,Python通常比PHP快,这是因为Python会把代码编译成字节码(就是那些.pyc文件)。而且很多DOM/SAX解析器内部也会用到不少正则表达式。那些建议你使用正则表达式的人需要知道,这并不是万能的解决办法。如果你有超过4万份文档,我建议你使用多线程来同时处理这些任务,或者可以试试经典的并行Python

2

你可以试试Python里的Beautiful Soup。这个工具很不错,可以把乱七八糟的HTML变成好用的DOM结构。如果你再加上一点正则表达式的技巧,可能就能得到你想要的结果。祝你好运!

在我个人的经验中,Python里的比较操作通常比PHP快。这部分是因为Python是编译语言,而PHP是在运行时解释的;另外,Python也经过了优化,效率更高...

不过,对于超过4万份文档,最好还是找台快点的机器哦;-)

3

如果你需要速度快一点,可以看看 lxml。lxml 是一个用 Python 语言写的库,它可以让你使用 libxml2libxslt 这两个 C 语言库。用这些 C 语言库处理数据要比纯用 PHP 或 Python 的版本快得多。

Ian Bicking 有一些很棒的 性能测试

总结

在我开始这些性能测试之前,我就知道 lxml 很快,但没想到它会快到这个程度。

解析结果:

解析结果 http://1.2.3.9/bmi/blog.ianbicking.org/wp-content/uploads/images/parsing-results.png

撰写回答