加快 HTML 敏捷包中的解析速度
本文关键字:速度 包中 HTML 加快 | 更新日期: 2023-09-27 18:32:10
这是我
用来用html敏捷包抓取某些标签的方法。 我使用这种方法与谷歌本地进行排名。 这似乎需要相当多的时间并且是内存密集型的,有人有任何建议可以使其更好吗?
private void findGoogleLocal(HtmlNode node) {
String name = String.Empty;
//
// ----------------------------------------
if (node.Attributes["id"] != null) {
if (node.Attributes["id"].Value.ToString().Contains("panel_") && node.Attributes["id"].Value.ToString() != "panel__")
{
GoogleLocalResults.Add(new Result(URLGoogleLocal, Listing, node, SearchEngine.Google, SearchType.Local, ResultType.GooglePlaces));
}
}
if (node.HasChildNodes) {
foreach (HtmlNode children in node.ChildNodes) {
findGoogleLocal(children);
}
}
}
为什么这个方法必须是递归的?只需一次性获取所有节点(例如使用 HAP 中的 Linq 支持):
var results = node.Descendants()
.Where(x=> x.Attributes["id"]!= null &&
x.Attributes["id"].Value.Contains("panel_") &&
x.Attributes["id"].Value!= "panel__")
.Select( x=> new Result(URLGoogleLocal, Listing, x, SearchEngine.Google, SearchType.Local, ResultType.GooglePlaces));
我只想添加另一个干净,简单和快速的解决方案:使用XPath。
var results = node
.SelectNodes(@"//*[contains(@id, 'panel_') and @id != 'panel__']")
.Select(x => new Result(URLGoogleLocal, Listing, x, SearchEngine.Google, SearchType.Local, ResultType.GooglePlaces));
foreach (var result in results)
GoogleLocalResults.Add(result);
Fizzler:用于HAP的CSS选择器引擎
http://code.google.com/p/fizzler/