使用 HTMLAgilityPack C# 检索遍历 HTML 页面的深层嵌套值

Retrieving deep nested values looping through a HTML page using HTMLAgilityPack C#

我正在尝试使用 HTMLAgilityPack 从网页中检索各种特定值。网页总是一样的,我想从中抓取的数据总是在同一个地方(相同的 divs/classes/attributes 等)。

我试图遍历并获取值,但我总是在某个地方搞砸了。我会提供一些代码来提供帮助,但老实说,我已经尝试了 5 次,每次我都没有得到接近我想要的结果 - 我真的很痛苦。

我写完了HTML的主要部分:

<div id ="markers">
   <div class="row">
      <div class="span2 filter-pane   ">
         <div class="teaser teaser-small">
            <h1 class="teaser-title">
            <a href="#map" data-lat="Value1" data-lng="Value2" data-name="Value3">...</a>
         </div>
         <p> Value4 </p>
      </div>
   </div>
   <div class="span2 filter-pane   ">
   </div>
   <div class="span2 filter-pane   ">
   </div>
</div>
<div class="row"></div>
<div class="row"></div>
</div>

基本上值 (1-4) 是我想从数据中提取的值。

页面上的 <div id="markers"> 是一个 div,我需要的所有信息都在这个 div.

有多个<div class="row"> div,我需要遍历所有这些。

在每个 div 中,有三个或更少的 <div class="span2 filter-pane "> div。我还需要遍历这 3 个 div。

我的数据在此处 - Value3 在 <p>...</p> 中。其他值可以在 <h1 class="teaser-title"> 节点中找到,它们是 <a> 元素中的属性。

我希望有人可以为我提供解决方案,或者至少提供一些好的指导来访问我想要的所有数据。我尝试了各种方法,但没有得到我想要的结果。

谢谢。

这里有一些提示给你。所以首先你需要获取 div#markers 因为你提到它包含你需要的所有信息。

string mainURL = your url;
HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load(mainURL);
var markerDiv = doc.DocumentNode.Descendants("div").FirstOrDefault(n => n.Id.Equal("markers');
//Check if marketDiv is null or not
//Same idea, get list of row divs
var rows = marketDiv.Descendants("div").HasClass("row") //I will provide .HasClass function or you can write your own, it's simple;
//Iterate throw your rows object
//for each row object
var aElement = row.Descendants("a").FirstOrDefault()//you can have more criteria here if it has more than 1 a element
aElement.GetAttributeValue("data-lat", "") //will return Value1 here, do the same thing for other attributes and p.

希望对您有所帮助