在链接中刮取隐藏的值

时间:2012-10-17 12:24:43

标签: c# web-scraping html-agility-pack

我正在抓取网站的内容。

我注意到我要刮的字段不包含我需要的确切信息。用户需要单击它以显示正确的值

e.g。 在屏幕中,用户可以看到“发送电子邮件”。点击发送电子邮件后,它将变为support@company.com。

现在,我想抓“support@company.com”。

一种有效的策略是解析链接的节点。我使用了string.IndexOfstring.Substring

<a href="#" onclick="displayEmail(this, 'support@company.com');......>Send Email</a>

还有其他选择吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

要查找特定节点或从HTML文档(或片段)获取节点的属性值,您可以使用AgilityPack。此外,要从字符串中提取特定信息,您可以使用正则表达式,字符串函数等。这取决于您要提取的信息类型。

要抓取电子邮件地址,或只是我使用正则表达式的数字(例如来自here)。

以下是如何从您提供的HTML片段中抓取电子邮件地址的示例:

var regex = new Regex(
    @"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b", 
    RegexOptions.IgnoreCase
);
var html = @"<a href='#' onclick='displayEmail(this, ""support@company.com"")'>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);