C# 检索网页时将语言首选项传递给HtmlAgilityPack
我的目标是从网站上读取特定的容器/标签/属性(出于我的爱好),除了获取我的值的德语翻译(我通常在浏览器中手动打开网站时获取该值)(可能是网站从用户代理获取特定信息),但如果我使用我的程序,它只会给我英语值) 工作c#控制台代码:C# 检索网页时将语言首选项传递给HtmlAgilityPack,c#,http-headers,console-application,html-agility-pack,fizzler,C#,Http Headers,Console Application,Html Agility Pack,Fizzler,我的目标是从网站上读取特定的容器/标签/属性(出于我的爱好),除了获取我的值的德语翻译(我通常在浏览器中手动打开网站时获取该值)(可能是网站从用户代理获取特定信息),但如果我使用我的程序,它只会给我英语值) 工作c#控制台代码: List<string> href = new List<string>(); List<string> titles = new List<string>(); for (int i = 0; i
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(屠宰场食尸鬼)”,而不仅仅是英文文本
可能是我需要这样的东西,但我在URL中找不到pramameter,它告诉服务器我希望标题信息中也包含德语
我更新了两行(注释),但它没有/没有改变任何内容。(来自的用户代理需要向服务器发送“接受语言”标题,告知您希望看到一个德语页面: 这基本上是一个缩写:
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;
}
lambda构造定义了一个匿名方法,短的、内联的和上下文中的。然后使用您可能熟悉的
+=
构造将该方法添加到PreRequest
事件处理程序列表中。您是否尝试设置webOverview.UserAgent
?是否能够检测编码?您可以通过webOverview进行设置。AutoDetectEncoding=true;谢谢你的帮助。我更新了它,但结果与以前一样。有很多javascript,可能是被这个javascript修改(翻译)的。当我浏览到那个页面时,我没有看到德语翻译。看到这个链接,可能是一种方式。这是什么样的结构?”webOverview.PreRequest+=(request)=>{request.Headers.Add(“接受语言”,“de-de”);return true;};“注册事件+lambda表达式…从未见过此情况…您能解释一下吗-请?
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;
}