使用HtmlAgilityPack從html中提取一個值

c# html-agility-pack xpath

我是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" />

這是我的編碼

<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" />

我知道我的xpath表達式確實存在問題,我對此毫無頭緒。任何善良的靈魂都能提出一些建議嗎非常感謝!

一般承認的答案

首先,您的代碼在doc.Load行上失敗,因為'Load'方法不支持URI,只支持文件路徑。您應該使用HtmlWebLoad方法下載HTML。

第二,XPath中的缺陷:

  • 你忘了關閉括號]
  • 沒有名稱設置為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標籤,而不是form 。因此,應修改您的XPath以符合此要求。

這是讀取您需要的數據的代碼:

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



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因