我正在抓取一个网站的内容。
我注意到我想要抓取的字段并不包含我需要的确切信息。用户需要单击它才能显示正确的值
例如,在屏幕上,用户可以看到“发送电子邮件”。单击发送电子邮件后,它将更改为support@company.com。
现在,我想刮掉"support@company.com“。
一种有效的策略是解析链接的节点。我使用了string.IndexOf
和string.Substring
)
<a href="#" onclick="displayEmail(this, 'support@company.com');......>Send Email</a>
还有没有别的选择?
谢谢!
发布于 2012-11-14 00:44:28
要从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);
https://stackoverflow.com/questions/12934291
复制相似问题