2012-05-14 2 views
7

私はHTMLタグとヘッダーなしでウェブサイトのテキストを読んでみたいです。私はちょうどウェブブラウザに表示されるテキストが必要です。C#でウェブサイトのコンテンツを読むには?

私は単なるテキスト "かくかくしかじかBLA" を必要とし、この

<html> 
<body> 
bla bla </td><td> 
bla bla 
<body> 
<html> 

のような必要はありません。

私は、HTMLコンテンツを取得するために、受信したデータを分割するのWebClientとHttpWebRequestの方法を使用していたが、私は、ウェブサイトを変更した場合、タグが変更される可能性があるため、それは不可能です。

ウェブサイトに表示されているテキストのみをアナグマティックに取得する方法はありますか?

+0

などのjavascript機能など、あなたがはっきりしたくないデータを持つノードなどを返します。取得したい要素です。したがって、パーサのgetElementByIdのようなメソッドで取得します。 – alfoks

+0

@alfoks ::あなたはHTMLパーサーの例のリンクを持っていますか? –

答えて

4

HtmlAgilityPackを使用する方法は次のとおりです。

まず、あなたのサンプルのHTML:(この場合は文字列として)

var html = "<html>\r\n<body>\r\nbla bla </td><td>\r\nbla bla \r\n<body>\r\n<html>"; 

読み込み、それをアップ:

var doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(html); 

ウェブからそれを取得し、同様の場合:

var web = new HtmlWeb(); 
var doc = web.Load(url); 

空白以外のテキストノードのみを選択してトリムします。あなたが好きなら

​​

あなたは、単一の参加文字列としてこれを取得することができます:

String.Join(" ", text) 

もちろんこれは、単純なWebページのために動作します。複雑なものはまた、私はあなたがページのソースのコントロールを持っている場合は、あなたがにIDを追加するには、HTMLパーサが必要と思う

+0

素晴らしいです...ありがとうございました... –

+0

::このようなループで文字列配列をインデックスとしてテキストインデックスにアクセスするにはどうすればいいですか 'for(i = 0; i

+0

'foreach(テキスト内の可変インデックス{{//インデックス付きのもの}') 'text'に対して直接行うことができます。あるいは、 'text.ToArray();'を実行して配列として扱うこともできます。 – yamen

-2
// Reading Web page content in c# program 
//Specify the Web page to read 
WebRequest request = WebRequest.Create("http://aspspider.info/snallathambi/default.aspx"); 
//Get the response 
WebResponse response = request.GetResponse(); 
//Read the stream from the response 
StreamReader reader = new StreamReader(response.GetResponseStream()); 
//Read the text from stream reader 
string str = reader.ReadLine(); 
for(int i=0;i<200;i++) 
{ 
    str += reader.ReadLine(); 

} 

Console.Write(str); 
+0

HTMLを単純なテキストのように扱うことはできません。通常のテキストや言語ではありません。 – Tigran

+0

このようにしても、すべてのマークアップを取得できます。 –

+0

@jaiff ::最後のループを詳しく説明して、なぜ200のインデックスしか読んでいないのか教えてください。 –

5

特殊なHTMLパーサーを使用する必要があります。そのようなコンテンツを取得する唯一の方法通常の言語。

参照:What is the best way to parse html in C#?

+0

それは私が得たいものではありません.... –

+0

これは一つの方法です、あなたはあなたが求めているものを得ることができます! – Writwick

+0

@azeemAkram:[HtmlAgilityPack](http://htmlagilitypack.codeplex.com/)を使用すると、興味のある値を取得できます。最後に、これはパーサーです。 – Tigran

-1

私はthis linkはあなたを助けることができると思います。

/// <summary> 
/// Remove HTML tags from string using char array. 
/// </summary> 
public static string StripTagsCharArray(string source) 
{ 
char[] array = new char[source.Length]; 
int arrayIndex = 0; 
bool inside = false; 

for (int i = 0; i < source.Length; i++) 
{ 
    char let = source[i]; 
    if (let == '<') 
    { 
    inside = true; 
    continue; 
    } 
    if (let == '>') 
    { 
    inside = false; 
    continue; 
    } 
    if (!inside) 
    { 
    array[arrayIndex] = let; 
    arrayIndex++; 
    } 
} 
return new string(array, 0, arrayIndex); 
} 
+0

正規表現をHTMLの解析に使用しないでください – crdx

+0

著者には3つの方法があります。最後の1つ(StripTagsCharArray)がお勧めです – R4j

+2

'x <4'のような組み込みJavaScript内でifステートメントを検出した場合、このメソッドはどのように管理されると思いますか?答えはあまりよくありません。正解は、HtmlAgilityPackを提案するものです。 – crdx

0
public string GetwebContent(string urlForGet) 
{ 
    // Create WebClient 
    var client = new WebClient(); 
    // Download Text From web 
    var text = client.DownloadString(urlForGet); 
    return text.ToString(); 
} 
関連する問題