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

标签 ios css ruby

问题

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

例如:
ruby device_name.rb "iPad3,4"
应该输出:
iPad(第 4 代)

我需要执行此操作的数据位于此 wiki 页面上: 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 开始,然后标识符继续奇数,直到没有更多的 child 。

如果标识符与输入到 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

关于ios - 使用 ruby​​ 通过 Nokogiri 的 css 方法抓取 Apple 设备标识符和名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44579095/

相关文章:

html - CSS 页脚宽度 :100% causes horizontal scroll

html - 如何根据标签文本长度拉伸(stretch)容器宽度?

ruby-on-rails - Rails 5. 如果设置了一个许可 key ,则不需要使用强参数

php - Ruby 将对象实例作为参数传递

Ruby 访问嵌套函数中的外部变量

ios - 如何将 UICollectionView 作为 subview 添加到 UIView?

ios - GPUImage GroupFilter、亮度和对比度 iOS

iphone - UISearchDisplayController 与网络获取数据的用法

ios - 如何在 iOS 中推送整个 View ,包括导航栏和工具栏

html - 防止工具提示容器上的悬停效果