我应该使用正则表达式还是只使用DOM /字符串操作?

时间:2013-08-04 23:09:12

标签: python html regex parsing html-parsing

有时我不确定何时必须使用其中一种。我通常使用Python解析所有类型的东西,但我想将这个问题集中在HTML解析上。

我个人认为,当必须解析两个以上的常规元素(例如,新闻列表的标题和正文)时,DOM操作非常有用。

然而,我发现自己处于这样的情况:我不清楚构建正则表达式或尝试仅仅操纵字符串来获得所需的值。一个特别虚构的例子:我必须得到一张专辑的照片总数,唯一的方法是用这种方式解析照片的数量:

  

(190 of 1)

所以我必须从整个HTML文档中获取'190'。我可以为此编写一个正则表达式,虽然用于解析HTML的正则表达式并不是最好的,或者这是我一直都能理解的。另一方面,使用DOM对我来说似乎是压倒性的,因为它只是一个简单的元素。字符串操作似乎是最好的方法,但我不确定我是否应该在类似的情况下继续这样做。

您能告诉我如何使用Python(或任何其他语言)从HTML文档中解析这些单个元素?

2 个答案:

答案 0 :(得分:4)

这是一个主观问题(主观答案),但总的来说,我会尽量避免使用正则表达式来解析HTML / XML,就像在SO中previously discussed一样。只有当带有标记的输入字符串很小并且没有变得更复杂的可能性,并且被搜索的模式是明确的并且容易被描述为正则表达式时,我才会使用正则表达式。这是一个平衡工作的正确工具和实际需要的问题。

对于你的具体例子,我认为从正则表达式开始是可以的。但是,如果您发现自己从输入中提取了其他信息和/或正则表达式开始变得麻烦,请切换到解析器。

答案 1 :(得分:2)

人们回避使用正则表达式来搜索HTML,因为在解析标记时它不适合作业。但是应该根据具体情况考虑一切。您没有搜索标签,而是在文档中搜索定义良好的字符串。在我看来,最简单的解决方案只是一个正则表达式或某种XPath表达式 - 简单的解析需要简单的工具。