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

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

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

  bla bla  bla bla   

Мне просто нужен текст «bla bla bla bla».

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

Так можно ли каким-либо образом получить только отображаемый текст на веб-сайте?

Вот как вы это сделаете, используя HtmlAgilityPack .

Сначала ваш образец HTML:

 var html = "\r\n\r\nbla bla \r\nbla bla \r\n\r\n"; 

Загрузите его (как строку в этом случае):

 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. Единственный способ получить контент такого нестандартного языка.

См .: Каков наилучший способ разобрать 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(); } 

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

 ///  /// Remove HTML tags from string using char array. ///  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);