使用 Ruby 通过 Nokogiri 的 css 方法抓取 Apple 设备标识符和名称



问题

我正在尝试创建一个 ruby 脚本,该脚本在给定标识符时输出 Apple 设备的生成名称

例如:
ruby device_name.rb "iPad3,4"
应输出:
iPad (4th generation)

我需要这样做的数据在这个维基页面上: https://www.theiphonewiki.com/wiki/Models

不幸的是,这些桌子很难刮。

在检查了 chrome 中的元素后,我在第一个表格上取得了一点成功,所以我可以看到 css 结构。

例如,这将在Apple TV表中获取标识符:

doc.css("div#content.mw-body div#bodyContent.mw-body-content div#mw-content-text.mw-content-ltr table.wikitable")[0].children[Y].children[11].text

Y 从 3 开始,然后标识符继续使用奇数,直到没有更多的子数字。

如果标识符与输入到 ARGV[0] 中的标识符匹配,那么我可以通过以下方式询问生成名称:

doc.css("div#content.mw-body div#bodyContent.mw-body-content div#mw-content-text.mw-content-ltr table.wikitable")[0].children[Y].children[1].text

到目前为止一切顺利,对吧?

但是接下来对应于Apple Watch的下一个表格以及之后的所有其他表格让我感到困惑。这将返回整个下一个表。

doc.css("div#content.mw-body div#bodyContent.mw-body-content div#mw-content-text.mw-content-ltr table.wikitable")[1]

但是,只需更改为以下内容即可使用相同的查找

doc.css("div#content.mw-body div#bodyContent.mw-body-content div#mw-content-text.mw-content-ltr table.wikitable")[0].children[3].children[11].text

显然应该有一个不同的 css 路径,因为有更多的列,但我无法获得相同的一致性或在其他表中找到坚实的模式。

问题

  1. 如何以编程方式获取所有这些标识符和名称?
  2. 有没有更好的方法来查找这些标识符?也许通过 API?

有点倒退,不一定漂亮,但是,

url = "http://web.archive.org/web/20170224033625/https://www.theiphonewiki.com/wiki/Models" # couldn't access the site itself
req = HTTParty.get(url)
doc = Nokogiri::HTML(req.response.body)
td = doc.css('td').detect { |td| td.text.index(input) }
model = td.parent.css('td')[0].text.strip

最新更新