如何使用 htmlagilitypack 查找锚点的下一个元素

How find next element of an anchor using with htmlagilitypack

这是我的 html 元素:

<a href="#" class="A">Sana</a>
<b><span class="B">1000</span>Dollar</b>

我想使用 htmlagilitypack 阅读 1000(价格)。
Sana innerText 是唯一的,但 Dollar innerText 不是唯一的。
目标页面中还有许多 类,名称为 A & B
我想读取一个具有 Sana innerText 的锚点(element a)并找到该锚点(element b)的下一个元素并读取它的 innerText。
这是我的代码:

HttpWebRequest req = (HttpWebRequest) WebRequest.Create("goal web site");
req.Method = "GET";
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8";
req.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
req.ContentType = "text/html; charset=utf-8";
req.Referer = "";
req.KeepAlive = true;
req.Timeout = 25000;
req.AllowAutoRedirect = true;

CookieContainer cookieJar1 = new CookieContainer();
req.CookieContainer = cookieJar1;

HttpWebResponse res = (HttpWebResponse) req.GetResponse();

foreach(Cookie cookie in res.Cookies) {
    cookieJar1.Add(new Cookie(cookie.Name.Trim(), cookie.Value.Trim(), "/", cookie.Domain));
}

Stream Stream = res.GetResponseStream();
StreamReader reader = new StreamReader(Stream);
string reader_str = reader.ReadToEnd();

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(reader_str);

这里怎么看1000的价格?

reader.Close();
Stream.Close();
res.Close();

您可以尝试使用以下 XPath* 表达式:

var xpath = "//a[.='Sana']/following-sibling::b[1]/span";
string price = htmlDoc.DocumentNode
                      .SelectSingleNode(xpath)
                      .InnerText;
Console.WriteLine(price.Text);

demo

XPath 表达式分解:

  • //a[.='Sana']: 在文档
  • 的任意位置找到具有内部文本等于'Sana'的<a>元素
  • /following-sibling::b[1]:找到第一个兄弟元素<b>,它位于上一步找到的<a>个元素之后
  • /span:找到 <span> 元素,它是在上一步中找到的 <b> 个元素的子元素

*) 如果您不熟悉,请阅读 "XPath" 主题。这是来自 MSDN 的一个:https://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx