2013-08-06 13 views
0

好吧,我想通過正則表達式從google主頁中提取所有鏈接。正則表達式什麼都不返回

但我面臨一個莫名其妙的問題。當我發送請求到谷歌主頁,並嘗試從頁面中提取所有鏈接時,我通常會得到一個結果,其餘部分是垃圾。但是,當我手動查看頁面的源並提取一些鏈接來測試它的工作模式。

現在我不知道這裏出了什麼問題,我認爲我的模式有缺陷,我正在努力解決問題,或者Google可能會向我的代碼和瀏覽器發送不同的響應。我非常感謝能否對此問題有所瞭解。

我的圖案

string pattern = @"=("")?(https?:\/\/)?[\w.-]+\.[\w]*([/]?[\w]*)*("")?"; 

我的顯示屏代碼

Match match = Regex.Match(source, pattern); 
     if (match.Success) 
     { 
      foreach (var res in match.Groups) 
      { 
       Console.WriteLine(res); 
      } 
      Console.ReadKey(); 
     } 
+0

我們需要的'source' ... –

+0

把你的代碼和提取斷點任何數據附加到'source'和你的內容」我們將看看Google是如何展示您的程序的。 – Logarr

+0

那麼這將是谷歌主頁的整體來源不知道是否適合發佈 –

回答

3

我認爲問題是,你只得到一個匹配。你需要調用Matches,或運行一個循環:

Matches ms = Regex.Matches(source, pattern); 
foreach (var m in ms) 
{ 
    Console.WriteLine(m.Value); 
} 

或...

Match m = Regex.Match(source, pattern); 
while (m.Success) 
{ 
    Console.WriteLine(m.Value); 
    m = m.NextMatch(); 
} 

請注意,你不應該在普通嘗試用正則表達式解析HTML。有瘋狂。但是,如果你不關心你選擇的某些「鏈接」不是真正的鏈接(即它們可能是文本而不是hrefs),那麼以這種方式使用正則表達式不是問題。

順便說一句,有一個MSDN文章,Example: Scanning for HREFs,你可能會覺得有用。

+0

是的,我知道解析HTMl的正則表達式是不好。但我使用它們是爲了學習的目的。 –

3

Don't try and parse HTML with regex。改爲使用HTML解析器,例如Html Agility Pack。這得到從給定的網頁上所有鏈接href(從他們example page

HtmlWeb hw = new HtmlWeb(); 
HtmlDocument doc = hw.Load(myURL); 
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href]")) 
{ 
} 
+0

我正在學習正則表達式,因此不想使用庫 –

+0

足夠公平,但只是要考慮如何使用它們進行HTML/XML解析時需要保持警惕:) – keyboardP

-1

好吧,我想我找到了問題。 Regex.Match只返回一個答案與Regex.Matches替換它返回一大堆的鏈接

相關問題