自学正则表达式还是xpath查询?

时间:2009-05-27 21:03:12

标签: c# .net regex xpath

是否可以编写生成正则表达式的代码或基于某些HTML文档解析链接的XPath?

我想要的是解析一些链接的页面。我唯一知道的是页面上的大多数链接都是那些链接。

举一个简单的示例,请访问Google搜索引擎结果页,例如this。大多数链接来自搜索结果,看起来像这样:

<h3 class="r"><a onmousedown="return rwt(this,'','','res','1','AFQjCNERidL9Hb6OvGW93_Y6MRj3aTdMVA','')" class="l" href="http://stackoverflow.com/"><em>Stack Overflow</em></a></h3>

是否有可能编写能够学习并识别出来并能够解析所有链接的代码,即使Google更改了他们的演示文稿?

我正在考虑解析所有链接,并在每个标记之前和之后查找X字符,然后从中进行处理。

我知道这也可以用XPath完成,但问题仍然是一样的。我可以解析此内容并生成有效的XPath来查找serp链接吗?

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,就没有必要编写学习算法。正则表达式足够强大,可以选择它。您可以使用以下正则表达式获取HTML页面中的所有链接:

(?<=href=")[^"]+(?=")

Regex Hero中验证,此正则表达式使用正向lookbehind和正向前导来获取href =“”内部的url。

如果您想更进一步,您还可以查找锚标记,以确保您获得实际的锚链接,而不是对css文件或其他内容的引用。你可以这样做:

(?<=<a[^<]+href=")[^"]+(?=")

只要页面遵循链接的href =“”约定,这应该可以正常工作。如果他们正在使用onclick事件,那么一切都会变得更加复杂,因为你将要处理Javascript的不可预测性。即使Google也不会抓取Javascript链接。

这有帮助吗?

答案 1 :(得分:0)

据我了解,大多数机器学习算法在有许多例子时都能发挥最佳作用,因为它们可以概括出“智能”行为。在这种情况下,您没有很多示例。谷歌不太可能经常改变他们的格式。即使对我们来说经常感觉到,但对于机器学习算法来说,这可能还不够。

监视当前格式可能更容易,如果更改,请更改代码。如果将预期格式设置为可配置的正则表达式,则可以重新部署新格式,而无需重新构建项目的其余部分。