2017-06-16 35 views
1

使用Ruby刮蘋果設備標識符和名稱與引入nokogiri的CSS方法

我想創建一個Ruby腳本給出的標識符時輸出蘋果設備的字輩的問題。

例如:
ruby device_name.rb "iPad3,4"
應該輸出:
iPad (4th generation)

我需要這樣做的數據是這樣的wiki頁面: https://www.theiphonewiki.com/wiki/Models

不幸的是,表被證明很難湊。

在檢查鉻中的元素後,我已經在第一個表中取得了一點成功,所以我可以看到css結構。

例如,這將讓我在標識符蘋果電視表:

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")[0].children[3].children[11].text 

顯然應該有不同的CSS路徑,因爲有更多的列,但我不能:

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

然而,同樣的查詢並不簡單地通過改變這樣的工作獲得相同的一致性或在其他表中找到可靠的模式。

問題

  1. 我怎麼可以得到所有這些標識和名稱編程的?
  2. 有沒有更好的方法來查看這些標識符?也許通過API?

回答

1

有點兒倒退,而不一定漂亮,但是,

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 
+0

這是偉大的,但似乎只有每個模型的第一標識工作。例如,「iPad2,1」返回「iPad 2」,但「iPad2,2」返回A模型「A1396」。任何調整? – kraftydevil