Как читать содержимое веб-сайта на c#?

Я хочу прочитать текст веб-сайта без html-тегов и заголовков. мне просто нужен текст, отображаемый в веб-браузере.

мне это не нужно

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

мне просто нужен текст "бла бла бла бла".

я использовал методы webclient и httpwebrequest для получения содержимого HTML и разделения полученных данных, но это невозможно, потому что если я изменю веб-сайт, теги могут измениться.

Так есть любой способ, чтобы получить только текст, отображаемый на сайте anagrammatically?

5 ответов


вот как вы это сделаете, используя 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);

теперь выберите только текстовые узлы с не-пробелами и обрезать их.

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

вы можете получить это как одну объединенную строку, если хотите:

String.Join(" ", text)

конечно это будет работать только для простых веб страницы. Все сложное также вернет узлы с данными, которые вы явно не хотите, такими как функции javascript и т. д.


вам нужно использовать специальный парсер HTML. Единственный способ получить содержание такого non регулярный язык.

посмотреть: каков наилучший способ анализа html В C#?


public string GetwebContent(string urlForGet)
{
    // Create WebClient
    var client = new WebClient();
    // Download Text From web
    var text = client.DownloadString(urlForGet);
    return text.ToString();
}

Я думаю этой ссылке могу помочь вам.

/// <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);
}

// 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);