gpt4 book ai didi

c# - 检索网页时将语言首选项传递给 HtmlAgilityPack

转载 作者:行者123 更新时间:2023-11-30 20:24:49 25 4
gpt4 key购买 nike

我的目标是从网站上读出特定的容器/标签/属性(出于我的爱好),一切正常,除了为我的值(value)获取德语翻译(我通常在浏览器中手动打开网站时得到(可能是网站从用户代理获取特定信息),但如果我使用我的程序,它只会给我英文值)

工作的 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(屠宰场食尸鬼)”,而不仅仅是英文文本

可能我需要这样的东西user agent而且我在 URL 中找不到 pramameter,它告诉服务器我还想要标题信息中的德语?

我更新了两行(评论),它确实/没有改变任何东西。(用户代理来自 http://www.whatsmyuseragent.com

最佳答案

您需要通过向服务器发送“Accept-Language” header 来告诉服务器您需要德语页面:

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;
}

lambda 构造定义了一个匿名方法,简短、内联和在上下文中。然后使用您可能熟悉的 += 结构将该方法添加到 PreRequest 事件处理程序列表。 More about this construct can be found here .

关于c# - 检索网页时将语言首选项传递给 HtmlAgilityPack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25920866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com