【问题标题】:How to get an element using c#如何使用c#获取元素
【发布时间】:2014-08-03 13:15:34
【问题描述】:

我是 C# 新手,我正在尝试使用 webBrowser 从网站访问元素。我想知道如何从网站上获取“开发者”字符串:

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

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

谢谢:)

【问题讨论】:

标签: c# html web-scraping


【解决方案1】:

您可以使用WebClient class下载源代码

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

【讨论】:

    【解决方案2】:

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

    但如果您的任务仅限于这个简单的要求,并且您有一个有效 XHTML 的 &lt;div&gt; 标记(如您发布的标记示例),那么您可以将其视为 XML。意味着您可以使用 .NET 原生 API(例如 XDocument 或 XmlDocument)来解析 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 上方选择 &lt;b&gt; 节点旁边的文本节点 ("Developers")。

    【讨论】:

      【解决方案3】:

      您可以使用 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

      【讨论】:

      • 旁注,el.InnerText 返回&lt;div&gt; 内所有文本节点的连接文本,在本例中为:“Title: Developers”
      • @har07 是的,我刚刚在查看我的答案时更正了它。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      相关资源
      最近更新 更多