4

だから私は少し画面スクレイピングを行うアプリケーションを書いています。HTML Agility Packを使用して、HTMLページ全体をHtmlDocoument呼び出されたのインスタンスにロードしていますdoc。今、私はこれを探して、そのドキュメントを解析したいと思います:

<table border="0" cellspacing="3">
<tr><td>First rows stuff</td></tr>
<tr>
<td> 
The data I want is in here <br /> 
and it's seperated by these annoying <br /> 's.

No id's, classes, or even a single <p> tag. </p> Just a bunch of <br />  tags.
</td> 
</tr> 
</table> 

したがって、2行目のデータを取得する必要があります。これどうやってするの?正規表現などを使用する必要がありますか?

更新:これが私のロード方法ですdoc

HtmlWeb hw = new HtmlWeb();
HtmlDocument doc = hw.Load(Url);
4

5 に答える 5

3

すでにHtmlAgilityPackを使用しているので、必要な情報を見つけるためにHtmlAgilityPackが提供する方法を使用することをお勧めします。ドキュメントをナビゲートする方法はいくつかありますが、最も簡潔な方法の1つは、XPathを使用することです。この場合、次のようなものを使用できます。

HtmlDocument doc = new HtmlDocument();
doc.Load("input.html");
HtmlNode node = doc.DocumentNode
                   .SelectNodes("//table[@cellspacing='3']/tr[2]/td")
                   .Single();
string text = node.InnerText;
于 2010-06-12T05:43:06.057 に答える
1

「他の何か」が最良の答えです。HTMLは、正規表現ではなく、HTMLパーサーによって最もよく解析されます。私はC#の専門家ではありませんが、HTMLAgilityPackはこの目的に好まれていると聞いています。

于 2010-06-12T05:31:41.880 に答える
1

私はsom̡et̨hińgElseと言います

于 2010-06-12T05:33:37.210 に答える
0

おそらく、xmlパーサーを使用するとマイレージが向上します。

于 2010-06-12T05:30:53.643 に答える
0

doc.DocumentNode.SelectNodes("//table[@cellspacing='3']")すでにAgilityパックを使用している場合は、ドキュメント内のテーブルを取得するために何かを使用するだけです。ドキュメントとコーディング例を調べてみてください。すでに構造化データがあるので、テキストデータに戻って再解析するのは面倒です。

于 2010-06-12T05:43:51.703 に答える