HTML от URL за домашните от Regular Expressions които ползват HTML
Здравейте,
Бележката към 2-ра задача "Replace <a> tag" от домашното "Regular Expressions" ме подсети че HTML-ът може да се зареди от файл.
Note: The input may be read on a single line (unlike the example above) or from a file. Remove all new lines if you choose the first approach.
И си направих един метод който да чете HTML от даден интернет адрес, за да го използвам за тестове за тази и другите задачи които работят с html. Не е нищо кой знае какво 7 - 8 реда код, но заради валидациите порасна малко (основното което трябва да се случи е във try блока, всичко друго са предпазни мерки):
private static string GetHTML(string url)
{
// most often the html string can't fit in the console buffer, set here
// a point where the string to be sliced
int maxLength = 5000;
string invalidUrlMessage = "Invalid URL, try again";
var urlValidator = new Regex(@"((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)");
if (urlValidator.IsMatch(url))
{
using (var webClient = new WebClient())
{
try
{
webClient.Encoding = Encoding.UTF8;
webClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0");
webClient.Headers.Add(HttpRequestHeader.AcceptCharset, "utf-8");
string html = webClient.DownloadString(url);
if (html.Length > maxLength)
{
return html.Substring(0, maxLength);
}
else
{
return html;
}
}
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.NameResolutionFailure)
{
return invalidUrlMessage;
}
else
{
throw ex;
}
}
}
}
else
{
return invalidUrlMessage;
}
}
Ползва се много лесно:
string html = GetHTML("https://softuni.bg")
и получавате страницата от посочения адрес (или част от нея ако е много голяма)