7

HTMLタグとヘッダーなしでウェブサイトのテキストを読みたいです。Web ブラウザに表示されるテキストだけが必要です。

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

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

「bla bla bla bla」というテキストが必要です。

webclient メソッドと httpwebrequest メソッドを使用して HTML コンテンツを取得し、受信したデータを分割しましたが、Web サイトを変更するとタグが変更される可能性があるため、それは不可能です。

ウェブサイトに表示されているテキストだけをアナグラム的に取得する方法はありますか?

4

5 に答える 5

5

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

参照: C# で html を解析する最良の方法は何ですか?

于 2012-05-14T07:48:27.627 に答える
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);

Webから取得する場合は、次のようになります。

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

次に、空白以外のテキストノードのみを選択してトリミングします。

var text = doc.DocumentNode.Descendants()
              .Where(x => x.NodeType == HtmlNodeType.Text && x.InnerText.Trim().Length > 0)
              .Select(x => x.InnerText.Trim());

必要に応じて、これを単一の結合文字列として取得できます。

String.Join(" ", text)

もちろん、これは単純なWebページでのみ機能します。複雑なものはすべて、javascript関数など、明らかに不要なデータを含むノードも返します。

于 2012-05-14T08:10:39.103 に答える
-1

このリンクはあなたを助けることができると思います。

/// <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);
}
于 2012-05-14T08:09:29.343 に答える
-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);
于 2012-05-14T07:47:49.593 に答える