получение html-тегов с помощью C#
-
19-09-2019 - |
Вопрос
ок, я получил этот код:
public static string ScreenScrape(string url)
{
System.Net.WebRequest request = System.Net.WebRequest.Create(url);
// set properties of the request
using (System.Net.WebResponse response = request.GetResponse())
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
}
Теперь я хочу отфильтровать текст, чтобы получить Div Class = "Comment" есть ли другой вариант, кроме как использовать регулярные выражения?или это единственный способ?
Спасибо
Решение
Вам необходимо использовать Пакет гибкости HTML.
Например:
var doc = new HtmlWeb().Load(url);
var comments = doc.Descendants("div")
.Where(div => div.GetAttributeValue("class", "") == "comment");
Обратите внимание, что это не найдет <div class="OtherClass comment">
;если ты это ищешь, ты можешь позвонить IndexOf
.
Другие советы
HtmlAgilityPack — это просто пакет, который позволяет вам манипулировать html-файлами, однако, если вы хотите выполнить очистку экрана, Selenium WebDriver с PhantomJS — лучшее решение.PhantomJS — это автономный веб-браузер, поэтому он очень быстрый.Более того, он имеет гораздо лучшую функциональность по сравнению с пакетом HTML Agility.Есть короткий курс на эту тему.
Не следует использовать регулярные выражения для анализа HTML — они не подходят для этой задачи, поскольку HTML для них слишком сложен.
Вам следует использовать парсер HTML.
Смотрите также:Ищу парсер C# HTML.
Ваш первый порт захода должен быть Пакет гибкости HTML.
Регулярные выражения — это классический способ анализа такого рода входных данных для языков, отличных от .NET.
Кроме того, если вы можете нормализовать это до варианта XML (т.XHTML), вы можете использовать XPATH для запроса и получения необходимых узлов.
Чего вы не хотите делать, так это реализовывать свой собственный парсер.