如何使用c#获取元素

时间:2014-08-02 11:56:16

标签: c# html web-scraping

我是C#的新手,我正在尝试使用webBrowser从网站访问元素。我想知道如何才能得到#34;开发人员"来自网站的字符串:

<div id="title" style="display: block;"> <b>Title:</b> **Developers** </div>

我尝试使用webBrowser1.Document.GetElementById("title"),但我不知道如何继续离开这里。

谢谢:)

3 个答案:

答案 0 :(得分:0)

您可以使用WebClient class

下载源代码

然后在文件中查找<b>Title:</b>**Developers**</div>,然后省略&#34;开发人员&#34;旁边的所有内容。

答案 1 :(得分:0)

您可以使用HtmlAgilityPack(如Giannis http://htmlagilitypack.codeplex.com/所述)。使用Web浏览器控件对于此任务来说太多了:

HtmlAgilityPack.HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://www.google.com");

var el = doc.GetElementbyId("title");
string s = el.InnerHtml; // get the : <b>Title:</b> **Developers**

我还没有尝试过这段代码,但它应该非常接近工作。

HtmlAgilityPack中必须有InnerText,允许您这样做:

string s = el.InnerText; // get the : Title: **Developers**

您还可以删除相应的节点来删除Title:

el.SelectSingleNode("//b").Remove();
string s = el.InnerText; // get the : **Developers**

如果出于某种原因你想坚持使用网络浏览器控件,我认为你可以这样做:

var el = webBrowser1.Document.GetElementById("title");
string s = el.InnerText; // get the : Title: **Developers**

<强>更新 请注意,上面的//b是XPath语法,您可能会对此感兴趣:

http://www.w3schools.com/XPath/xpath_syntax.asp

http://www.freeformatter.com/xpath-tester.html

答案 2 :(得分:0)

HtmlAgilityPackCsQuery是许多人在.NET中使用HTML页面的方式,我也推荐它们。

但是如果你的任务仅限于这个简单的要求,并且你有一个<div>标记是有效的XHTML(就像你发布的标记样本一样),那么你可以把它当作XML。表示您可以使用.NET本机API(例如XDocumentXmlDocument)来解析HTML并执行XPath查询以从中获取特定部分,例如:

var xml = @"<div id=""title"" style=""display: block;""> <b>Title:</b> Developers</div>";
//or according to your code snippet, you may be able to do as follow :
//var xml = webBrowser1.Document.GetElementById("title").OuterHtml;

var doc = new XmlDocument();
doc.LoadXml(xml);
var text = doc.DocumentElement.SelectSingleNode("//div/b/following-sibling::text()");
Console.WriteLine(text.InnerText);
//above prints " Developers"

在XPath之上选择"Developers"节点旁边的文本节点(<b>)。