Вопрос по html, c# – Как читать содержимое сайта в c #?

7

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

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

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

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

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

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

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

Ваш Ответ

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

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

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

Но это один из способов, вы можете получить то, что вы просите!
@azeemAkram: использованиеHtmlAgilityPack Вы можете получить значения, которые вас интересуют. В конце концов, это парсер.
это не то, что я хочу получить .... Azeem Akram
-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);
}
Автор дает вам 3 метода. Последний (StripTagsCharArray) рекомендуется
Как, по вашему мнению, справится этот метод, если встретится с оператором if в каком-то встроенном JavaScript-коде, подобном & apos; if x & lt; 4 & APOS ;? Ответ: не очень хорошо. Правильный ответ - тот, который предлагает HtmlAgilityPack.
регулярные выражения не должны использоваться для разбора HTML
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);

Если получить его из Интернета, аналогично:

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

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

Похожие вопросы