На данный вопрос уже ответили:
Есть небольшая задачка. Написать программу для чтения содержимого сайта. И дальнейшей записи этого в файл. Но желательно очистить текст от лишнего мусора.
Вот как я просто читаю всё содержимое:
string data = "Time = 12:00am temperature = 50";
var Client = new System.Net.WebClient();
Client.Credentials = System.Net.CredentialCache.DefaultCredentials;
Client.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
string text = Client.UploadString("", data);
int startIndex = text.IndexOf("<h1");
int length = text.IndexOf("Спасибо за внимание!") - startIndex;
text = text.Substring(startIndex, length);
string[] splitString = new string[] {"<p>", "</p>", "<u>", "</u>", "<i>", "</i>", "<strong>", "</strong>", "<h2>", "</h2>", "<h3>", "</h3>"};
string[] clearText = text.Split(splitString, StringSplitOptions.None);
Прокси, на случай если сайт не даст дёрнуть свои данные без авторизации. Так вот какие параметры для вытаскивания информации. Начиная с открытия тега h1 и заканчивая введённым словом/фразой, которую в консольке введёт пользователь. И всё что я вытащу, мне нужно очистить от специальных символов. То есть оставить только текст. Кто нибудь может подсказать как это можно сделать?
Как очистить текст от кода html? Так же появилась 3 проблема. Бывает сползает кодировка. Пытаюсь поправить вот так вот:
Client.Encoding = System.Text.Encoding.UTF8; Не помогает. Подскажите пожалуйста что сделать ещё и с этим.
Ваше решение плохо несколькими моментами:
<p>
вы вырежете, хорошо. А <p class="asdf" style="color:red;padding: 0 10px;">
уже нет. А внутри может быть очень много вариантов -- и вы придёте к регуляркам, сложным и плохо отлаживаемым.Возьмите например, AngleSharp.
Он умеет скачивать сайты:
private static IDocument GetPage(Url url)
{
var config = Configuration.Default.WithDefaultLoader();
var document = BrowsingContext.New(config).OpenAsync(url).Result;
if (document.StatusCode != HttpStatusCode.OK)
throw new Exception($"Bad document status: {document.StatusCode}");
return document;
}
Он умеет парсить html, для вашего случая:
var parser = new HtmlParser();
var document = parser.Parse(@"<html><head></head><body>
<div class='product'>
<a href='/url1.html'><img src='img1.jpg' alt=''></a>
Hello, world
<div class='comments-likes'>1</div>
<table id='menutable'>
<tr>
<td>Head1</td>
<td>Head2</td>
</tr>
<tr>
<td class='bla ble'>31</td>
<td>content</td>
</tr>
<tr>
<td class='bla ble'>32</td>
<td>content</td>
</tr>
</table>
</div>
<div class='footer'>
<a href='http://www.ya.ru/q=asdf'>
</div>
</body></html>");
var text = document.QuerySelector("body").TextContent;
Console.WriteLine(text);
Вывод:
Поэтому как я вижу решение вашей задачи: распарсить сайт html-парсером и получить TextContext для документа.
PS Да, это подойдёт для любого сайта.
Ставить AngleSharp проще всего через менеджер пакетов: правый клик на солюшене - Manane Nuget packages for solution. Тогда и все неймспейсы подтянутся.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Как нужно правильно написать программу для перехвата причины, по которой HDD выходит из сна? Или как написать программу мониторинга чтения...