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

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

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

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

i just need the text "bla bla bla bla".

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

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

 Azeem Akram14 мая 2012 г., 10:02
@alfoks :: есть ли у вас примеры примеров для HTML-парсера?
 alfoks14 мая 2012 г., 09:51
Я думаю, что вам понадобится анализатор HTML, и, если у вас есть контроль над источником страницы, добавьте идентификатор к элементу, который вы хотите получить, чтобы получить его с помощью метода, подобного getElementById анализатора.

Ответы на вопрос(5)

// 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);
 14 мая 2012 г., 09:49
Вы не можете относиться к HTML как к простому тексту или с регулярными выражениями, этоnot обычный текст или язык.
 14 мая 2012 г., 09:50
Таким образом, вы все еще получаете всю наценку.
 Azeem Akram14 мая 2012 г., 10:03
@jaiff :: Не могли бы вы уточнить последний цикл, почему вы читаете его только для 200 индексов.

лучить содержание такогоnon обычный язык.

Увидеть:Каков наилучший способ анализа HTML в C #?

 Azeem Akram14 мая 2012 г., 10:02
это не то, что я хочу получить ....
 14 мая 2012 г., 10:04
Но это один из способов, вы можете получить то, что вы просите!
 14 мая 2012 г., 10:23
@azeemAkram: использованиеHtmlAgilityPack Вы можете получить значения, которые вас интересуют. В конце концов, это парсер.

эта ссылка могу помочь тебе.

/// <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);
}
 14 мая 2012 г., 16:07
Автор дает вам 3 метода. Последний (StripTagsCharArray) рекомендуется
 14 мая 2012 г., 13:37
регулярные выражения не должны использоваться для разбора HTML
 14 мая 2012 г., 19:23
Как, по вашему мнению, справится этот метод, если встретится с оператором if в каком-то встроенном JavaScript-коде, подобном & apos; if x & lt; 4 & APOS ;? Ответ: не очень хорошо. Правильный ответ - тот, который предлагает HtmlAgilityPack.
Решение Вопроса

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 и т. Д.

 Azeem Akram14 мая 2012 г., 12:14
:: как я могу получить доступ к текстовому индексу по индексу, как я это делаю со строковым массивом в цикле, как это 'for (i = 0; i & lt; size; i ++) {string index = array [i]} & apos;
 14 мая 2012 г., 12:20
Вы можете сделать это противtext непосредственно:foreach (var index in text) { // do something with index }, Кроме того, вы можете сделатьtext.ToArray(); и иметь дело с ним как с массивом.
 Azeem Akram14 мая 2012 г., 12:06
офигенно это сработало ... спасибо, дорогой ...
public string GetwebContent(string urlForGet)
{
    // Create WebClient
    var client = new WebClient();
    // Download Text From web
    var text = client.DownloadString(urlForGet);
    return text.ToString();
}

Ваш ответ на вопрос