2011-11-14 3 views
2

私はC#のWebページからテキストを取りたいと思っています。
私はHTMLを取得したくない、私はWebページの実際のテキストをオフにします。 「<b>cake</b>」と入力した場合と同様に、タグではなくケーキが必要です。ウェブページからテキストを取り除くには?

+0

HTMLアジャイルパックなどのHTMLパーサーを確認してから、DOMをループして繰り返し、各要素からテキストを抽出します。 –

+0

http://htmlagilitypack.codeplex.com/ – John

答えて

4

HTMLアジリティパックライブラリを使用します。

あなたの要件は、このコードを使用するために、解析HTMLのための非常に細かいライブラリです:

HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb(); 
    HtmlAgilityPack.HtmlDocument doc = web.Load("Yor Path(local,web)"); 
    var result=doc.DocumentNode.SelectNodes("//body//text()");//return HtmlCollectionNode 
    foreach(var node in result) 
    { 
     string AchivedText=node.InnerText;//Your desire text 
    } 
+0

これは非常に良い答えです!ありがとう。 –

1
あなたはこのようなこの1 (簡単な例)として、正規表現を使用してタグを取り除くことができ

// You can import System.Text.RegularExpressions for convenience, of course. 
System.Text.RegularExpressions.Regex tag = new System.Text.RegularExpressions.Regex("\<.+?\>"); 
myHTML = tag.Replace(myHTML, String.Empty); 

しかし、あなたは、よく構造化データを大量に取得する必要がある場合、あなたは良いかもしれませんHTMLライブラリを使用してオフにします。 (WebページがXHTMLの場合は、すべてのより良い - System.Xmlクラスを使用します。)

http://htmlagilitypack.codeplex.com/と同様に、例えば。
JavaScriptからデータを取得しようとしている場合、またはデータが要素の属性内にあり、山括弧を含む場合は、意図しない副作用が発生する可能性があります。また、&amp;のようなエスケープシーケンスを受け入れる必要があります。

+0

RegExがうまくいくとは思わない。あなたは、タグの一部ではなく、HTML、CSS、Javascriptの文字列定数などに現れることができる山括弧を使うことができます。これを行う唯一の方法は、HTMLパーサーで行うことです。 –

+0

@MikeChristensen:それで、私は「単純な例」と「大量」と言っていたのです。 OPにほんの少ししか必要がない場合は、プロジェクトに本格的なパーサを含める必要はありません。さらに、JavaScriptはデータの解析には含まれないことが多いですが、CSSは間違いなく... – Ryan

+0

それはあなたが意味していたことです。私はそれをより明示的に指摘したいと思っていました。 –

1

それは依存します。 アプリケーションがWebBrowserコンポーネントを使用してWebページをダウンロードする場合、そのコンポーネントは(Internet Explorerのように)バックグラウンドで自動的に解析を行います。 DOMツリーを歩き、必要なテキストを抽出するだけです。 HtmlElement.InnerText propertyが特に便利です。

関連する問題