Передача языкового предпочтения HtmlAgilityPack при получении веб-страниц
Моя цель состоит в том, чтобы считывать определенные контейнеры / теги / атрибуты с веб-сайта (для моего хобби), все работает, кроме получения перевода на немецкий язык для моего значения (которое я обычно получаю, когда вручную открываю сайт в браузере (может быть, в Интернете). сайт получает конкретную информацию от пользовательского агента), но если я использую свою программу, это даст мне только английское значение)
Рабочий код консоли C#:
List<string> href = new List<string>();
List<string> titles = new List<string>();
for (int i = 0; i < 1; i++)
{
var webOverview = new HtmlWeb();
var documentOverview = webOverview.Load("http://gatherer.wizards.com/Pages/Search/Default.aspx?page=0&format=[%22Commander%22]");
webOverview.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0";//updated
webOverview.AutoDetectEncoding = true;//updated
var pageOverview = documentOverview.DocumentNode;
HtmlNode[] hrefList = pageOverview.QuerySelectorAll("td.leftCol").ToArray();
HtmlNode[] titleList = pageOverview.QuerySelectorAll("div.cardInfo").ToArray();
for (int rowcounter = 0; rowcounter < hrefList.Count(); rowcounter++)
{
var hrefValue = hrefList[rowcounter].QuerySelector("a").Attributes["href"].Value;
var titleValue = titleList[rowcounter].QuerySelector("span.cardTitle").InnerText;
href.Add(hrefValue);
titles.Add(titleValue);
Console.WriteLine(rowcounter.ToString() + ". " + hrefValue + ": " + titleValue + "\n\n");
}
}
Console.WriteLine("Links: " + href.Count + " Titles: " + titles.Count + "\n");
В моем браузере я вижу что-то вроде этого "Schlachthaus-Ghul (Abattoir Ghoul)"(без настройки языковых свойств), но если я выполняю свою программу, я получаю "Abattoir Ghoul", который был создан с помощью оператора
HtmlNode[] titleList = pageOverview.QuerySelectorAll("div.cardInfo").ToArray();
но мне нужен этот "Schlachthaus-Ghul (Abattoir Ghoul)", а не только текст на английском языке
Может быть, мне нужно что-то вроде этого пользовательского агента, и я не могу найти прамаметр в URL, который говорит серверу, что я хочу, также немецкий в информации заголовка?
Я обновил две строки (комментарий), и это ничего не изменило (пользовательский агент с http://www.whatsmyuseragent.com/
1 ответ
Вам нужно сообщить серверу, что вы ожидаете немецкую страницу, отправив ей заголовок "Accept-Language":
var webOverview = new HtmlWeb();
webOverview.PreRequest += (request) =>
{
request.Headers.Add("Accept-Language", "de-DE");
return true;
};
var documentOverview = webOverview.Load("http://gatherer.wizards.com/Pages/Search/Default.aspx?page=0&format=[%22Commander%22]");
Что в основном означает:
public void Yourmethod()
{
var webOverview = new HtmlWeb();
webOverview.PreRequest += SendGermanLanguageHeaders;
var documentOverview = webOverview.Load("http://gatherer.wizards.com/Pages/Search/Default.aspx?page=0&format=[%22Commander%22]");
}
private bool SendGermanLanguageHeaders(HttpWebRequest request)
{
request.Headers.Add("Accept-Language", "de-DE");
return true;
}
Лямбда-конструкция определяет анонимный метод, короткий, встроенный и в контексте. Затем этот метод добавляется к PreRequest
список обработчиков событий с использованием +=
построить, вы, вероятно, знакомы с. Подробнее об этой конструкции можно узнать здесь.