Nokogiri仅首先获得带有链接的列表项

时间:2019-05-14 17:35:13

标签: ruby html-parsing nokogiri

我有一个如下文件:

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

我只想获取以<a>标记开头的列表项,即第一个<li>会被点击,而第二个则不会。

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

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

任何建议将不胜感激!

1 个答案:

答案 0 :(得分: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