【问题标题】:Nokogiri only get list items with links firstNokogiri 只获取带有链接的列表项
【发布时间】:2019-10-01 19:06:24
【问题描述】:

我的文档如下所示:

<ul>
  <li>
    <a href="/Synergies">Link</a>Content
  </li>
  </li>
    Content <a href="/Synergies">Link</a>
  </li>
</ul>

我只想获取以&lt;a&gt; 标记开头的列表项,即第一个&lt;li&gt; 会成功,但第二个不会。

我尝试在 html 内容上获取所有列表项和正则表达式匹配,但它似乎不起作用:

list.search('li').each do |item|
  if /^<a href="\/Synergies".*$/.match(item) 
    puts link # hit?
  end
end

任何建议将不胜感激!

【问题讨论】:

    标签: ruby html-parsing nokogiri


    【解决方案1】:

    您可以检查项目的第一个孩子是否不是文本或空文本:

    list.search('li').each do |item|
      if !item.children.first.text? || item.children.first.text.strip.empty?
        puts item # hit?
      end
    end
    

    如果要排除不以链接开头的项目,可以选择第一个孩子并在条件中检查其父母:

    list.search('li > a:first-child').each do |item|
      if !item.parent.children.first.text? || item.parent.children.first.text.strip.empty?
        puts item # hit?
      end
    end
    

    【讨论】:

    • 这不会检查链接。
    • 我添加了第二个明确检查链接的示例。
    • 第一个例子完成了我所需要的——我对问题的困惑很不利
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    相关资源
    最近更新 更多