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

C# 自学习正则表达式还是xpath查询?,c#,.net,regex,xpath,C#,.net,Regex,Xpath,是否可以编写生成正则表达式或XPath的代码来解析基于某个HTML文档的链接 我想要的是解析页面中的一些链接。我只知道页面上的大多数链接都是这些链接 举个简单的例子,比如谷歌搜索引擎的结果页面。大多数链接来自搜索结果,看起来像这样: <h3 class="r"><a onmousedown="return rwt(this,'','','res','1','AFQjCNERidL9Hb6OvGW93_Y6MRj3aTdMVA','')" class="l" href="http

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

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

举个简单的例子,比如谷歌搜索引擎的结果页面。大多数链接来自搜索结果,看起来像这样:

<h3 class="r"><a onmousedown="return rwt(this,'','','res','1','AFQjCNERidL9Hb6OvGW93_Y6MRj3aTdMVA','')" class="l" href="http://stackoverflow.com/"><em>Stack Overflow</em></a></h3>
(?<=<a[^<]+href=")[^"]+(?=")
是否有可能编写代码来学习并识别这一点,并能够解析所有链接,即使谷歌改变了它们的表示方式

我正在考虑解析所有链接,并在每个标记之前和之后查找X字符,然后从中开始工作


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

如果我理解您的问题,就不需要编写学习算法了。正则表达式的功能强大,足以解决这个问题。您可以使用以下正则表达式获取HTML页面中的所有链接:

(?<=href=")[^"]+(?=")
在中验证,此正则表达式使用正向向后看和正向向前看来获取href=内部的url

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

<h3 class="r"><a onmousedown="return rwt(this,'','','res','1','AFQjCNERidL9Hb6OvGW93_Y6MRj3aTdMVA','')" class="l" href="http://stackoverflow.com/"><em>Stack Overflow</em></a></h3>
(?<=<a[^<]+href=")[^"]+(?=")
只要页面遵循链接的href=约定,就可以正常工作。如果他们使用onclick事件,那么在处理Javascript的不可预测性时,一切都会变得更加复杂。甚至谷歌也不会抓取Javascript链接


这有帮助吗?

据我所知,大多数机器学习算法在有许多例子概括“智能”行为时效果最好。在本例中,示例并不多。谷歌不太可能经常改变他们的格式。即使我们经常感觉到,对于机器学习算法来说,这可能还不够


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

uh。。。链接不总是href=something吗?是的,这就是我目前使用的方法,我会坚持下去。谢谢