You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby Mechanize如何仅选择后续兄弟节点中的首个ul节点?

解决Mechanize中精准选择第一个
    节点的最优方案

嘿,我来帮你搞定这个Mechanize节点选择的问题~你之前的思路没问题,但确实存在性能浪费的情况,因为div ~ ul会把

之后所有同级的
    都捞出来再取第一个,页面里
      多的话确实不划算。这里有几个更精准高效的方案:

      方案1:用CSS伪类:first-of-type直接定位

      这是最简洁的方式,直接通过CSS选择器锁定

      之后的第一个
        兄弟节点,不用先拿所有
          再筛选:

          page.at('div ~ ul:first-of-type li').inner_html
          

          :first-of-type会直接匹配符合条件的第一个节点,避免了多余的节点遍历,性能拉满。

          方案2:用:nth-of-type(1)实现同样效果

          和上面的逻辑一致,只是语法换了种写法,同样精准定位第一个后续

            :

            page.at('div ~ ul:nth-of-type(1) li').inner_html
            

            方案3:用XPath表达式精准路径匹配

            如果你更熟悉XPath,也可以直接写定向路径,明确只取

            的第一个
              兄弟:

              page.at('//div/following-sibling::ul[1]/li').inner_html
              

              这里following-sibling::ul[1]的意思就是“取当前节点之后的第一个

                兄弟”,完全不会碰后面多余的
                  ,性能最优。

                  顺带解释下你之前的问题

                  你之前用page.at('div').search('~ ul').first时,search('~ ul')会先把

                  之后所有
                    都查出来,再取第一个,这一步在
                      数量多的时候会做很多无用功。而上面的几种方案都是直接定位目标节点,一步到位,不用额外处理多余节点。

                      内容的提问来源于stack exchange,提问作者Matrix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:42:34