2012-10-17 63 views
0

我在抓取網站的內容。在鏈接中颳去隱藏的值

我注意到我想刮的字段沒有包含我需要的確切信息。用戶需要點擊它以顯示正確的值

例如, 在屏幕上,用戶可以看到「發送電子郵件」。點擊發送電子郵件後,它將更改爲[email protected]

現在,我想刮「[email protected]」。

工作的一個策略是解析鏈接的節點。我用string.IndexOfstring.Substring

<a href="#" onclick="displayEmail(this, '[email protected]');......>Send Email</a> 

是否還有其他選擇嗎?

謝謝!

+0

你可以使用正則表達式來檢查指定的模式。 – subZero

+0

@subzero你能給一個示例代碼嗎?如果我需要刮取名稱或號碼而不是電子郵件,該怎麼辦? – lionheart

回答

0

要查找特定節點或從HTML文檔(或片段)獲取節點的屬性值,可以使用AgilityPack。此外,要從字符串中提取特定的信息,您可以使用正則表達式,字符串函數等。這取決於您要提取的信息種類。

要刮掉電子郵件地址,或只是使用正則表達式的數字(例如從here)。

下面是關於如何從您提供的HTML片段湊電子郵件地址的例子:

var regex = new Regex(
    @"\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b", 
    RegexOptions.IgnoreCase 
); 
var html = @"<a href='#' onclick='displayEmail(this, ""[email protected]"")'>Send Email</a>"; 
var doc = new HtmlDocument(); 
doc.LoadHtml(html); 

// just an example on how to get node's attribute value 
// your selectors could be completely different 
var onclick = doc.DocumentNode.SelectSingleNode("a").Attributes["onclick"].Value; 
var email = regex.Match(onclick);