Member 12620371 Ответов: 1

C# Как удалить страницу, если ее больше двух htmltags?


У меня возникли проблемы с соскабливанием этого:
<td class="main txt"><a href="http://bors-nliv.svd.se/index.php/detail/index/4600">Afarak Group</a></td>


Я хотел бы отказаться от названия акции, в данном примере это: Afarak Group, но не смог понять, как после всех моих попыток и поисков. Но мне удалось избавиться от цен на акции с помощью этого кода:

 private void button3_Click(object sender, EventArgs e)
    {
        List<string> aktier = new List<string>();
        WebClient web = new WebClient();
        String html = web.DownloadString("http://bors-nliv.svd.se/index.php/aktier/index/35244");
        MatchCollection m1 = Regex.Matches(html, @"<td>\s*(.+?)s*</td>", RegexOptions.Singleline);

        foreach (Match m in m1)
        {
            if (m.Groups[1].Value != "3")

            if (m.Groups[1].Value != "Aktier")
            {


                string aktie = m.Groups[1].Value;
                aktier.Add(aktie);
            }
        }
        listBox2.DataSource = aktier;
    }
}



Вот цена акции, которая имеет только эти два htmltags
<td>0,41</td>
Но как я могу отказаться от названия акций страницы, когда она выглядит вот так?

<pre lang="HTML">
<td class="main txt"><td class="main txt"><a href="http://bors-nliv.svd.se/index.php/detail/index/4600">Afarak Group</a></td>
это еще пара html-тегов.

Я пытался настроить спички на это

MatchCollection m1 = Regex.Matches(html, @"<a href"">\s*(.+?)s*</td>", RegexOptions.Singleline);


Но это все равно не работает. Что я упускаю?

Что я уже пробовал:

MatchCollection m1 = Regex.Matches(html, @"<a href"">\s*(.+?)s*</td>", RegexOptions.Singleline);

1 Ответов

Рейтинг:
0

Karthik_Mahalingam

Попробуйте это с помощью Html Agility Pack[^]
Обратитесь к этой библиотеке dll для вашего проекта (выберите правильный фреймворк)

List<string> aktier = new List<string>();
           WebClient web = new WebClient();
           String html = web.DownloadString("http://bors-nliv.svd.se/index.php/detail/index/4600");
           HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
           doc.LoadHtml(html);
           var div = doc.DocumentNode.Descendants("div").Where(d =>d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("secondary-nr")).First();
           for (int i = 0; i < div.ChildNodes.Count; i++)
           {
               var node = div.ChildNodes[i];
               string temp = node.InnerText.Trim();
               if (temp.Length > 0)
                   aktier.Add(temp);
           }
           listBox2.DataSource = aktier;


Member 12620371

Как это сделать без использования пакета HTML agility pack? Что это за регулярное выражение? Не могу этого понять

Karthik_Mahalingam

Регулярное выражение-это регулярное выражение, которое является частью основной библиотеки, используемой для поиска строк в определенном шаблоне.
но HTML Agility pack - это сторонняя библиотека, используемая для анализа HTML/DOM

Member 12620371

Я попробовал ваш код, и он не работает. Попадаю не в те струны.

Karthik_Mahalingam

какие именно строковые данные вам нужны?
предоставьте дополнительную информацию .

Member 12620371

&ЛТ;тд класс="главная тхт"&ГТ;&ЛТ;тд класс="главная тхт"и GT;Группа Afarak < / td>

Мне нужна строка "Afarak Group". Между звеньями( и

Karthik_Mahalingam

попробуйте это сделать по этой ссылке http://bors-nliv.svd.se/index.php/detail/index/4600 [^]
var h1 = doc.DocumentNode.Потомки ("Н1").Первый().Через свойство innerText;

Karthik_Mahalingam

Веб-клиент веб = новый Вебклиент();
Строка html = web.DownloadString("http://bors-nliv.svd.se/index.php/aktier/index/35244");
HtmlAgilityPack. HtmlDocument doc = новый HtmlAgilityPack.HtmlDocument();
doc. LoadHtml (html);
таблица var = doc.DocumentNode.Потомки ("таблица").Первый();
var tbody= таблица.ChildNodes.Где(к =&ГТ; к. Имя == "элемента tbody").Первый();
var rows = tbody.ChildNodes.Где (k => k.Name == "тр").Список();
var target = rows[0].ChildNodes[7].InnerText; / / Afarak Group