Парсинг TITLE на сайте 404 страницы
В инстаграме бывают 404 страницы двух типов, с тайтлом Content Unavailable и PAge Not Found Мне нужно чтобы их выводило. Программу тестировал на google.com, содержимое выводит без проблем, а в моем случае ошибка
System.Net.WebException: "Удаленный сервер возвратил ошибку: (404) Не найден."
..
код программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics; // Нужна, чтобы запускать внешние процессы
using System.Net; // Нужна, чтобы работать с Web
using System.Threading; // Нужна, чтобы скоротать время
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.IO;
using System.Text.RegularExpressions;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
var request = WebRequest.Create("https://www.instagram.com/jemeeltittus/");
using (var responses = request.GetResponse())
{
using (var streams = responses.GetResponseStream())
using (var readers = new StreamReader(streams))
{
string html = readers.ReadToEnd();
var UpdExp = new Regex(@"(?<=<title>)(.*)(?=</title>)");
string upDate = UpdExp.Match(html).Groups[""].Value; // дата
Console.WriteLine(upDate); //выводим тайтла
Console.ReadKey();
}
}
Console.ReadKey();
}
}
}
Ответы (2 шт):
Автор решения: Bulson
→ Ссылка
Может так?
class Program
{
static void Main(string[] args)
{
var username = "name";
var password = "password";
var domain = "www.instagram.com";
var link = "https://www.instagram.com/jemeeltittus/";
var task = Task.Run(async () => await GetHtmlAsync(username, password, domain, link));
Console.WriteLine(task.Result);
Console.WriteLine();
Console.ReadLine();
}
private static async Task<string> GetHtmlAsync(string username, string password, string domain, string link)
{
var result = String.Empty;
var httpClientHandler = new HttpClientHandler()
{
Credentials = new NetworkCredential(username, password, domain),
};
try
{
using (var client = new HttpClient(httpClientHandler))
{
var response = await client.GetAsync(link);
if (response.IsSuccessStatusCode)
{
result =await response.Content.ReadAsStringAsync();
}
else
{
result = response.StatusCode.ToString();
}
}
}
catch (Exception ex)
{
result = ex.Message;
}
return result;
}
}
Выдает NotFound. У меня нет аккуанта в инстаграме, так что проверить точно не могу.
Автор решения: n.prokhorov
→ Ссылка
С использованием HttpClient (вместо устаревшего Webrequest) и HtmlAgilityPack (для парсинга html вместо регулярок; библиотека доступна в nuget) можно следующим образом получить HTML-title страницы, думаю это подойдет для решения вашей задачи
using HtmlAgilityPack;
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace App
{
class Program
{
static async Task Main(string[] args)
{
string title;
using (var client = new HttpClient())
{
var response = await client.GetAsync("https://www.instagram.com/jemeeltittus/");
var doc = new HtmlDocument();
doc.LoadHtml(await response.Content.ReadAsStringAsync());
title = doc.DocumentNode.SelectSingleNode("/html[1]/head[1]/title").InnerText;
}
Console.WriteLine(title);
Console.ReadKey();
}
}
}