使用HtmlAgilityPack从html中提取一个值

时间:2013-09-01 10:51:47

标签: c# xpath html-agility-pack

我是c#和htmlagilitypack的新手,我一直试图获得signup_form_id的值 这是2079787163

<form name="setupform" id="setupform" method="post" action="/signup/" target="_top">
<input type="hidden" name="form_type" value="blog" />
<input type="hidden" name="stage" value="" />
<input type="hidden" name="loc" value="signup" />
<input type='hidden' name='signup_form_id' value='2079787163' /><input type="hidden" id="_signup_form" name="_signup_form" value="9783b65654" />

继承我的编码

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表达式确实存在问题,我真的对此无能为力。任何善良的灵魂都能提出一些建议吗非常感谢!

1 个答案:

答案 0 :(得分:3)

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

第二,XPath中的缺陷:

  • 您忘记了结束括号Load
  • 没有名称设置为]
  • 的表单

总之,您应该按如下方式修改代码:

signup_form_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); 代码,而不是input。因此,应修改XPath以符合此要求。

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

form