使用 html 敏捷包获取课堂链接

发布于 2024-09-02 03:53:56 字数 306 浏览 5 评论 0原文

有很多 tr 与类 alt。我想获取所有链接(或最后一个链接),但我无法弄清楚如何使用 html 敏捷包。

我尝试了 a 的变体,但我只得到所有链接或没有。它似乎不仅仅得到节点中的一个,这没有意义,因为我正在写 n.SelectNodes

html.LoadHtml(page);
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']");
foreach (var n in nS)
{
  var aS = n.SelectNodes("a");
  ...
}

There are a bunch of tr's with the class alt. I want to get all the links (or the first of last) yet i cant figure out how with html agility pack.

I tried variants of a but i only get all the links or none. It doesnt seem to only get the one in the node which makes no sense since i am writing n.SelectNodes

html.LoadHtml(page);
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']");
foreach (var n in nS)
{
  var aS = n.SelectNodes("a");
  ...
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ヤ经典坏疍 2024-09-09 03:53:56

您可以使用 LINQ:

var links = html.DocumentNode
           .Descendants("tr")
           .Where(tr => tr.GetAttributeValue("class", "").Contains("alt"))
           .SelectMany(tr => tr.Descendants("a"))
           .ToArray();

请注意,这也将匹配 ;您可能想用正则表达式替换 Contains 调用。

您还可以使用 Fizzler

html.DocumentNode.QuerySelectorAll("tr.alt a");

请注意,这两种方法也会返回非链接的锚点。

You can use LINQ:

var links = html.DocumentNode
           .Descendants("tr")
           .Where(tr => tr.GetAttributeValue("class", "").Contains("alt"))
           .SelectMany(tr => tr.Descendants("a"))
           .ToArray();

Note that this will also match <tr class="Malto">; you may want to replace the Contains call with a regex.

You could also use Fizzler:

html.DocumentNode.QuerySelectorAll("tr.alt a");

Note that both methods will also return anchors that aren't links.

北座城市 2024-09-09 03:53:56

为什么不在单个查询中选择所有链接:

html.LoadHtml(page);
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']//a");
foreach(HtmlNode linkNode in nS)
{
//do something
}

它对 html 有效:

<table>
<tr class = "alt">
<td><'a href="link.html">Some Link</a></td>
</tr>
</table>

Why not select all links in single query:

html.LoadHtml(page);
var nS = html.DocumentNode.SelectNodes("//tr[@class='alt']//a");
foreach(HtmlNode linkNode in nS)
{
//do something
}

It's valid for html:

<table>
<tr class = "alt">
<td><'a href="link.html">Some Link</a></td>
</tr>
</table>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文