【问题标题】:Cheerio / jQuery equivalent of Descendants.LastOrDefault (HTML Agility pack)Cheerio / jQuery 相当于 Descendants.LastOrDefault(HTML 敏捷包)
【发布时间】:2019-09-08 07:02:12
【问题描述】:

我有在 C# .NET Core 2 中使用 HTML Agility 包实现的网页抓取代码。

我们将大部分服务器移植到 node.js。唯一剩下的部分是这个网络抓取位。我目前正在尝试使用 Cheerio/jQuery 来复制它,但我对 jQuery 语法不太熟悉。

什么相当于

DocumentNode.Descendants("table")
            .LastOrDefault(t => t.InnerHtml.Contains("<td align=\"center\">Match</td>"))

我试过了:

$('table > tbody > tr > td > table > tbody')

但这仍然给了我很多东西。我基本上想抓住表格的行。我想要的表应该包含那个 td 字段。

谢谢!

编辑:

我没有添加 html,而是粘贴了 URL。这样我们就可以检查元素。我基本上想获取Team Schedule 表,这样我就可以解析角色并获取它们的StatusMatchMatch Date 以及该表的其余列。 https://www.ustanorcal.com/teaminfo.asp?id=82607

我之前使用Descendants("table").LastOrDefault() 在上面的帖子中添加的 sn-p 能够做到这一点,但我不知道如何用 jQuery 做到这一点。

【问题讨论】:

  • 您正在使用什么minimal reproducible example html,您希望使用选择器检索哪些元素?
  • 听起来你想要:$('td[align="center"]')。请注意,这只是 css,所以如果您需要熟悉它,可以参考大量文档。
  • 我在上面添加了一个示例。这不会抓住我所有满足这一点的td 元素吗?我想要这张桌子和它的所有行。很抱歉之前没有粘贴示例。

标签: jquery node.js web-scraping html-agility-pack cheerio


【解决方案1】:

我会这样做:

// team schedule rows:
$('table:has(b:contains("Team Schedule")) + table table tr')
// team roster rows:
$('table:has(b:contains("Team Roster")) + table table tr')

我认为这比 HTML Agility 的东西干净得多

【讨论】:

  • 谢谢!如果你不介意,你能解释一下吗?我想我遵循table:has(b:contains("Team Roster")) 部分,该部分基本上是找到一个具有&lt;b&gt; 元素的表,该元素包含文本Team Roster。但是 + table table tr 部分是做什么的?这句话是在包含 tr 的单词之后立即放置表格吗?
  • 我认为只有tr 是包含标签status match 等的标题行。如果我想要它下面的行,我会正确使用:$('table:has(b:contains("Team Schedule")) + table table') 这基本上会在您的示例中删除最后的 tr
  • 啊,没关系,我想我现在明白了。你的查询是对的。如果我想跳过前 3 行,我会只做一个.each() 并且只在 ndx 为 3 时添加东西吗?
  • 是的,我发现了一些有用的东西::not(:first-child,:nth-child(2),:nth-child(3))
  • 抱歉,+ 是(第一个表的)下一个兄弟,跳过 3 将是 nth-child(n+4) - 顺便说一下,这只是 css。
猜你喜欢
  • 2010-12-30
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 2017-06-21
  • 1970-01-01
相关资源
最近更新 更多