C# 来自HttpWebResponse的GetElementById

C# 来自HttpWebResponse的GetElementById,c#,.net,web-scraping,C#,.net,Web Scraping,最近我对网页抓取很有兴趣。我想使用的网站没有API,所以我别无选择,我必须这样做 我遇到的问题之一是读取HTML树的元素(我指的是标记、内部文本和类似的东西)。我使用HttpWebRequest和HttpWebResponse向服务器发送GET/POST请求 拥有webResponse我可以通过以下方式阅读HTML源代码: StreamReader sr=newstreamreader(webResponse.GetResponseStream(),Encoding.UTF8); 字符串sour

最近我对网页抓取很有兴趣。我想使用的网站没有API,所以我别无选择,我必须这样做

我遇到的问题之一是读取HTML树的元素(我指的是标记、内部文本和类似的东西)。我使用
HttpWebRequest
HttpWebResponse
向服务器发送GET/POST请求

拥有
webResponse
我可以通过以下方式阅读HTML源代码:

StreamReader sr=newstreamreader(webResponse.GetResponseStream(),Encoding.UTF8);
字符串sourceCode=sr.ReadToEnd();
我需要的是这个
输入
标签的



如何做到这一点?

一种方法是使用HTML解析器解析HTML,然后使用XPath简单地选择所需的元素

这比试图从包含HTML的字符串中正则化相关代码要干净得多


一种方法是使用HTML解析器解析HTML,然后使用XPath简单地选择所需的元素

这比试图从包含HTML的字符串中正则化相关代码要干净得多

我会用

stringhtml=@”
";
HtmlAgilityPack.HtmlDocument doc=新的HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
//Xpath
var value1=doc.DocumentNode.SelectSingleNode(//input[@id='abc'])
.属性[“值”]。值;
//林克
var value2=doc.DocumentNode.subjects(“输入”)
.First(i=>i.Attributes[“id”!=null&&
i、 属性[“id”]。值==“abc”)
.属性[“值”]。值;
我会使用

stringhtml=@”
";
HtmlAgilityPack.HtmlDocument doc=新的HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
//Xpath
var value1=doc.DocumentNode.SelectSingleNode(//input[@id='abc'])
.属性[“值”]。值;
//林克
var value2=doc.DocumentNode.subjects(“输入”)
.First(i=>i.Attributes[“id”!=null&&
i、 属性[“id”]。值==“abc”)
.属性[“值”]。值;

WoW!太棒了!伟大的解析器。它就像一个符咒。非常感谢(特别是XPath表达式)。哇!太棒了!伟大的解析器。它就像一个符咒。非常感谢(特别是XPath表达式)。
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;