2009-05-27 94 views
0

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

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

举个简单的例子,带一个谷歌搜索引擎结果页面,例如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> 

是否可以写学习本,并承认这一点,并能够解析各个环节,即便谷歌改变了他们的演示代码?

我正在考虑解析出所有链接,并在每个标签之前和之后查找X字符,然后从中找出答案。

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

+0

呃...不会链接永远是href =“东西”? – dss539 2009-05-27 21:08:38

回答

0

据我所知,大多数机器学习算法的工作效果最好,当他们有很多例子来推广'智能'行为。在这种情况下,你没有很多例子。 Google不太可能经常更改格式。即使我们经常感觉到,这对于机器学习算法来说可能是不够的。

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

+0

是的,这是我现在使用的方法,我会坚持下去。谢谢 – alexn 2009-05-28 06:02:06

0

如果我理解你的问题,真的没有必要写一个学习算法。正则表达式足够强大,可以选择它。你可以在HTML页面中的所有链接与以下正则表达式:

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

验证了Regex Hero,此正则表达式使用正回顾后和积极的前瞻抢HREF =的“”里面的网址。

如果你想更进一步,你也可以寻找锚标记,以确保你得到一个实际的锚点链接,而不是一个CSS文件或引用。你可以这样做:

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

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

这有帮助吗?