最近,我正在与网页刮刮‘乐趣’。我想使用的网站没有API,所以我别无选择,我不得不这样做。
我遇到的问题之一是读取HTML树的元素(我指的是标签、内部文本之类的东西)。我使用HttpWebRequest和HttpWebResponse向服务器发送GET/POST请求。
有了webResponse,我可以这样读取HTML源代码:
StreamReader sr = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8);
string sourceCode = sr.ReadToEnd();我需要的是这个value标记的input:
<form action="/file.php" method="post">
<input name="abc" id="abc" type="hidden" value="some_random_value" />
</form>我怎么能这么做?
发布于 2012-09-23 19:34:25
我会用HtmlAgilityPack
string html = @"<form action=""/file.php"" method=""post"">
<input name=""abc"" id=""abc"" type=""hidden"" value=""some_random_value"" />
</form>";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
//Xpath
var value1 = doc.DocumentNode.SelectSingleNode("//input[@id='abc']")
.Attributes["value"].Value;
//Linq
var value2 = doc.DocumentNode.Descendants("input")
.First(i => i.Attributes["id"] != null &&
i.Attributes["id"].Value == "abc")
.Attributes["value"].Value;发布于 2012-09-23 18:30:23
其中一种方法是使用HTML解析HTML,然后使用XPath简单地选择所需的元素。
这将比尝试从包含HTML的字符串中正则化相关代码要干净得多。
http://htmlagilitypack.codeplex.com/
https://stackoverflow.com/questions/12555040
复制相似问题