Ruby Mechanize获取具有指定文本的元素

Geo*_*kas 8 css ruby mechanize

我试图使用机械化解析网站的内容,我陷入了困境.我要解析的内容位于li标记内,并不总是以相同的顺序排列.

让我们假设我们有以下li标签的顺序并不总是相同的,有些甚至根本不存在.

<div class="details">
  <ul>
    <li><span>title 1</span> ": here are the details"</li>
    <li><span>title 2</span> ": here are the details"</li>
    <li><span>title 3</span> ": here are the details"</li>
    <li><span>title 4</span> ": here are the details"</li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

我想要的只是获取文本li所在的细节.我所做的是以下内容,它给出了第一个细节:spantitle 3li

puts page.at('.details').at('span', :text => "title 3").at("+ *").text
Run Code Online (Sandbox Code Playgroud)

有没有办法用机械化做我想要的东西,还是我还应该用其他方法?

Rod*_*ore 18

page.search(".details").at("span:contains('title 3')").parent.text
Run Code Online (Sandbox Code Playgroud)

说明:在at处可以使用css或xpath选择器.为了使您的方法更具可读性和类似性,此答案使用css选择器,但问题是CSS无法基于文本执行选择.感谢Nokogiri,您可以使用JQuery选择器,因此contains方法是允许的.

选择获取span元素,因此如果要获取li元素parent,可以使用方法,然后轻松获取文本.