C# 使用HtmlAlityPack从html中提取值

C# 使用HtmlAlityPack从html中提取值,c#,xpath,html-agility-pack,C#,Xpath,Html Agility Pack,我是c和htmlagilitypack的新手,我一直在尝试获取注册表单id的值 这是20797163 这是我的密码 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.Load("https://signup.wordpress.com/signup/"); var value = doc.DocumentNode.SelectSingleNode("//form[@name='signup_for

我是c和htmlagilitypack的新手,我一直在尝试获取注册表单id的值 这是20797163

这是我的密码

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load("https://signup.wordpress.com/signup/");
var value = doc.DocumentNode.SelectSingleNode("//form[@name='signup_form_id'");
Console.WriteLine(value.InnerText);

我知道我的xpath表达式确实有问题,对此我真的一无所知。任何善良的灵魂都能给出一些建议吗?非常感谢

首先,您的代码在doc.Load行失败,因为“Load”方法不支持URI,只支持文件路径。您应该使用HtmlWeb的Load方法下载HTML

第二,XPath中的缺陷:

你忘记了一个结束括号] 没有名称设置为“注册表单id”的表单 总之,您应该按如下方式修改代码:

var url = "http://signup.wordpress.com/signup/";

var htmlWeb = new HtmlWeb();
var doc = htmlWeb.Load(url);

var value = doc.DocumentNode.SelectSingleNode("//form[@id='setupform']");
Console.WriteLine(value.OuterHtml);
更新:很好你已经澄清了这个问题;起初我对这个问题的理解是错误的

看起来您要查找的是输入标记,而不是表单。因此,应该修改XPath以满足此要求

下面是读取所需数据段的代码:

var url = "http://signup.wordpress.com/signup/";

var htmlWeb = new HtmlWeb();
var doc = htmlWeb.Load(url);

var signupFormIdElement = doc.DocumentNode
    .SelectSingleNode("//input[@name='signup_form_id']");

var signupFormId = signupFormIdElement.GetAttributeValue("value", "");

Console.WriteLine(signupFormId);

首先,您的代码在doc.Load行失败,因为“Load”方法不支持URI,只支持文件路径。您应该使用HtmlWeb的Load方法下载HTML

第二,XPath中的缺陷:

你忘记了一个结束括号] 没有名称设置为“注册表单id”的表单 总之,您应该按如下方式修改代码:

var url = "http://signup.wordpress.com/signup/";

var htmlWeb = new HtmlWeb();
var doc = htmlWeb.Load(url);

var value = doc.DocumentNode.SelectSingleNode("//form[@id='setupform']");
Console.WriteLine(value.OuterHtml);
更新:很好你已经澄清了这个问题;起初我对这个问题的理解是错误的

看起来您要查找的是输入标记,而不是表单。因此,应该修改XPath以满足此要求

下面是读取所需数据段的代码:

var url = "http://signup.wordpress.com/signup/";

var htmlWeb = new HtmlWeb();
var doc = htmlWeb.Load(url);

var signupFormIdElement = doc.DocumentNode
    .SelectSingleNode("//input[@name='signup_form_id']");

var signupFormId = signupFormIdElement.GetAttributeValue("value", "");

Console.WriteLine(signupFormId);

我认为您要使用的xpath表达式应该类似于//input[@name='signup\u form\u id']/@value,或者更严格的//form[@id='setupform']//input[@name='signup\u form\u id']/@value。感谢w0lf和@rmhartog的反馈。是的,我只是想得到2079787163的值。使用//input[@name='signup\u form\u id']/@value可以让我一直到。有什么想法吗?您是否将xpath与InnerHTML结合使用,而不是与OuterHTML结合使用?我没有办法试,但是,嗯。@rmhartog不,试过了,它不起作用。根本没有给我任何结果。谢谢你的努力,伙计!我试图找到更多关于使用普通方法解析结果的信息。我也有同样的问题。似乎//输入[@name='signup\u form\u id']/@值不适用于隐藏类型。你知道吗?我想你想要的xpath表达式应该是类似于//input[@name='signup\u form\u id']/@value或者更严格的//form[@id='setupform']//input[@name='signup\u form\u id']/@value。谢谢w0lf和@rmhartog的反馈。是的,我只是想得到2079787163的值。使用//input[@name='signup\u form\u id']/@value可以让我一直到。有什么想法吗?您是否将xpath与InnerHTML结合使用,而不是与OuterHTML结合使用?我没有办法试,但是,嗯。@rmhartog不,试过了,它不起作用。根本没有给我任何结果。谢谢你的努力,伙计!我试图找到更多关于使用普通方法解析结果的信息。我也有同样的问题。似乎//输入[@name='signup\u form\u id']/@值不适用于隐藏类型。有什么想法吗?