我正在抓取网站的内容。
我注意到我要刮的字段不包含我需要的确切信息。用户需要单击它以显示正确的值
e.g。 在屏幕中,用户可以看到“发送电子邮件”。点击发送电子邮件后,它将变为support@company.com。
现在,我想抓“support@company.com”。
一种有效的策略是解析链接的节点。我使用了string.IndexOf
和string.Substring
)
<a href="#" onclick="displayEmail(this, 'support@company.com');......>Send Email</a>
还有其他选择吗?
谢谢!
答案 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);