3

C# でプログラムを開発していますが、助けが必要です。特定の Web サイトに表示されるアイテムの配列またはリストを作成しようとしています。私がやろうとしているのは、アンカーテキストを読むことですhref. たとえば、これは HTML です。

<div class="menu-1">
    <div class="items">
        <div class="minor">
            <ul>
                <li class="menu-item">
                    <a class="menu-link" title="Item-1" id="menu-item-1"
                    href="/?item=1">Item 1</a>
                </li>
                <li class="menu-item">
                    <a class="menu-link" title="Item-1" id="menu-item-2"
                    href="/?item=2">Item 2</a>
                </li>
                <li class="menu-item">
                    <a class="menu-link" title="Item-1" id="menu-item-3"
                    href="/?item=3">Item 3</a>
                </li>
                <li class="menu-item">
                    <a class="menu-link" title="Item-1" id="menu-item-4"
                    href="/?item=4">Item 4</a>
                </li>
                <li class="menu-item">
                    <a class="menu-link" title="Item-1" id="menu-item-5"
                    href="/?item=5">Item 5</a>
                </li>
            </ul>
        </div>
    </div>
</div>

そのHTMLから、私はこれを読みたいと思います:

string[,] array = {{"Item 1", "/?item=1"}, {"Item 2", "/?item=2"},
    {"Item 3", "/?item=3"}, {"Item 4", "/?item=4"}, {"Item 5", "/?item=5"}};

HTMLは私が書いた例で、実際のサイトはそうではありません。

4

4 に答える 4

9

HtmlAgilityPack が html 解析に最適であると他の人が言ったように、HtmlAgilityPack サイトから HAP Explorer をダウンロードし、それを使用して選択をテストしてください。とにかく、この SelectNode コマンドは ID を持つすべてのアンカーを取得し、それは menu-item で始まります:

  HtmlDocument doc = new HtmlDocument();
  doc.Load(htmlFile);
  var myNodes = doc.DocumentNode.SelectNodes("//a[starts-with(@id,'menu-item-')]");
  foreach (HtmlNode node in myNodes)
  {
    Console.WriteLine(node.Id);

  }
于 2012-05-22T20:35:29.613 に答える
2

HTMLが有効なXMLである場合は、XmlDocumentクラスを使用してHTMLをロードし、XPathを使用して必要な部分にアクセスするか、XmlReaderAdrianoが提案するように(もう少し作業を)使用できます。

HTMLが有効なXMLでない場合は、既存のHTMLパーサーを使用することをお勧めします(たとえば、これを参照してください)。

于 2012-05-22T20:18:05.783 に答える
1

このケースは、次のような正規表現を使用するのに十分単純だと思います<a.*title="([^"]*)".*href="([^"]*)"

string strRegex = @"<a.*title=""([^""]*)"".*href=""([^""]*)""";
RegexOptions myRegexOptions = RegexOptions.None;
Regex myRegex = new Regex(strRegex, myRegexOptions);

string strTargetString = ...;

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Use the groups matched
  }
}
于 2012-05-22T20:33:34.947 に答える
1

HtmlAgilityパックを使用することもできます

于 2012-05-22T20:24:01.370 に答える