使用 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.
希望对您有所帮助
我正在尝试使用 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.
希望对您有所帮助