способов много, но предложу использовать универсальный, пусть это и костыль, но много место не занимает, дополнительные (сторонние библиотеки не нужны...):
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
public static class Program
{
private static string html = "Ошибка";
private static void Main()
{
ShowTags("https://www.yandex.ru/","a");
Console.ReadKey();
}
private static async void ShowTags(string my_url, string tag = "a") // Тег по умолчанию для поиска, ищем теги <a></a>
{
// Загружем страницу
string data = await GetHtmlPageText(my_url);
if (!data.Contains("Ошибка"))
{
string pattern = string.Format(@"\<{0}.*?\>(?<tegData>.+?)\<\/{0}\>", tag.Trim());
// \<{0}.*?\> - открывающий тег
// \<\/{0}\> - закрывающий тег
// (?<tegData>.+?) - содержимое тега, записываем в группу tegData
Regex regex = new Regex(pattern, RegexOptions.ExplicitCapture);
MatchCollection matches = regex.Matches(data);
foreach (Match matche in matches)
{
Console.WriteLine(matche.Value);
Console.WriteLine("Содержание:");
Console.WriteLine(matche.Groups["tegData"].Value);
Console.WriteLine("---------------------------");
}
}
else
{
Console.WriteLine("Ошибка при загрузке со страницы: " + my_url);
}
}
private static async Task<string> GetHtmlPageText(string url)
{
await Task.Run(async()=>{
// ... используем HttpClient.
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(url))
using (HttpContent content = response.Content)
{
// ... записать ответ
string result = await content.ReadAsStringAsync();
if (html != null)
{
html = result;
}
}
});
return html;
}
}
}
результат на примере yandex.:
<a href="http://mail.yandex.ru"onclick="c(this,17,1080)">Войти в почту</a>
Содержание:
Войти в почту
Regex работает быстрее чем остальные парсеры