首页 > 解决方案 > Ruby Nokogiri 有序 HTML 标签

问题描述

背景:我正在开发一个用于学习目的的简单网络爬虫。我正在尝试从有关 Ruby 编程语言的 Wikipedia 页面中抓取主标题<h2>和副标题元素。<h3>我可以单独访问其中的每一个,但我想以一种可以替换任何 Wikipedia 文章的方式编写我的代码。

主要问题:我正在寻找一种方法来列出页面上元素<h3>之间的所有<h2>元素。有没有办法直接通过 Nokogiri 做到这一点,或者它会涉及使用一些 Ruby 作为解决方法?

基本上,我希望能够列出主标题和随附的子标题,但我看不到将它们分组的方法,因为 Wikipedia 没有将它们分组在 html 中。

感谢您的时间。

-M

标签: htmlrubyparsingnokogiri

解决方案


我会使用 Nokogiri 的 CSS 选择器。The Bastard's Book of Ruby 对此进行了很好的入门。http://ruby.bastardsbook.com/chapters/html-parsing/

在您的情况下,您需要使用以下内容:

page.css('h2:not([id]) > span.mw-headline, h3:not([id]) > span.mw-headline')

根据我在维基百科页面的开发工具控制台中看到的内容,主标题和副标题没有 ID 属性,这就是我使用:not([id])伪选择器的原因。它将查找所有没有 ID 的 h2 和 h3 元素。每个带有标题标题的嵌套跨度都有.mw-headline类。

如果您只想要 h3 元素(每个部分的子标题),您可以只拥有:

page.css('h3:not([id]) > span.mw-headline')

推荐阅读