2009-05-27 29 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鏈接。

這有幫助嗎?