0

我正在抓取网站的内容。

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

例如,在屏幕上,用户可以看到“发送电子邮件”。单击发送电子邮件后,它将更改为 support@company.com。

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

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

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

还有其他选择吗?

谢谢!

4

1 回答 1

0

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

要抓取电子邮件地址,或者只是数字,我会使用正则表达式(例如 from 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);
于 2012-11-13T16:44:28.193 回答