【发布时间】:2020-06-20 12:32:37
【问题描述】:
我在 Ruby on Rails 应用程序中使用 Nokogiri gem,遇到了一个奇怪的问题。这是我正在处理的 HTML 树:
在父 HTML 文档上使用 Nokogiri,我可以像这样成功地遍历树:
y[0].css("div.postContainer.opContainer div.post.op")[0]['id']
# => "p25273352"
y[0].css("div.postContainer.opContainer div.post.op")[0].css(" > div").length
# => 3
y[0].css("div.postContainer.opContainer div.post.op")[0].css(" > blockquote").length
# => 1
但是,当我尝试对 a 或 span 标记执行相同操作时,它找不到任何直系后代:
y[0].css("div.postContainer.opContainer div.post.op")[0].css(" > a").length
=> 0
y[0].css("div.postContainer.opContainer div.post.op")[0].css(" > span").length
# => 0
感觉我必须在这里遗漏一些明显的东西,但无法弄清楚。有什么想法吗?
【问题讨论】:
-
欢迎来到 SO。请参阅“How to Ask”、“Stack Overflow question checklist”和“MCVE”及其所有链接页面,以及“Why not upload images of code on SO when asking a question?”和“Discourage screenshots of code and/or errors”。您要求我们输入 HTML 只是为了帮助您。
-
css("div.postContainer.opContainer div.post.op")[0]应使用at或at_css编写。见nokogiri.org/tutorials/… -
如果问题本身没有最小的 HTML 来说明问题,就很难为您提供帮助。如果 HTML 格式错误,Nokogiri 将进行修复,这可能导致 HTML 被更改。在 Nokogiri 解析 HTML 后,检查 Nokogiri::HTML::Document 对象上的
errors方法。
标签: ruby-on-rails ruby css-selectors nokogiri