0

これは、HTML アジリティ パックで特定のタグを取得するために使用する方法です。私はこの方法を使用して、Google ローカルでランキングを作成しています。かなりの時間がかかり、メモリを大量に消費するようですが、改善するための提案はありますか?

 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);
      }
    }

  }
4

3 に答える 3

2

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);
于 2012-04-24T18:16:12.670 に答える
2

なぜこのメソッドは再帰的でなければならないのですか? 一度にすべてのノードを取得するだけです (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));
于 2012-04-24T17:35:42.097 に答える
0

Fizzler: HAP の CSS セレクター エンジン

http://code.google.com/p/fizzler/

于 2012-04-24T17:22:20.137 に答える