我正在重新格式化多個汽車經銷商的庫存管理器的搜索查詢的HTML輸出格式。沒有直接的數據庫訪問,服務創建者沒有任何信息,所以我決定嘗試使用Nokogiri解析和重新格式化數據,並基於搜索查詢生成新的結果頁面。使用Nokogiri&Sinatra解析和重新格式化數據的最有效方法
在第一次加載頁面時,我只是使用默認搜索來生成第一個結果。
對於搜索工作,我將查詢發送到一個URL是這樣的:
post '/search/?:search_query' do
url = "http://domain.com/v/?DealerId=" + settings.dealer_id + "&maxrows=10&#{params[:search_query]}"
doc = Nokogiri::HTML(open(url))
doc.css("td:nth-child(5) .ForeColor4").each do |msrp|
session["msrp"] = msrp.inner_html
end
doc.css("td:nth-child(4) .ForeColor4").each do |price|
session["price"] = price.inner_html
end
erb :index
end
我知道一定是做到這一點的明智之選。
編輯:
一個例子URL來請求數據:
http://domain.com/?DealerId=1234&object=list&lang=en&MAKE=&MODEL=&maxrows=50&MinYear=&MaxYear=2011&Type=N&MinPrice=&MaxPrice=&STYLE=&ExtColor=&MaxMiles=&StockNo=
產生的HTML的描述:
不幸的是,它的舊代碼這是幾乎完全表爲基礎的,具有inline-風格和大多數地區缺乏類或ID。
CSS選擇器的一個例子:
td:nth-child(5) .ForeColor4
一個XPath選擇:
//td[(((count(preceding-sibling::*) + 1) = 5) and parent::*)]//*[contains(concat(" ", @class, " "), concat(" ", "ForeColor4", " "))]
我也看了機械化或角度來說,Hpricot的可能性,但我不知道的最好的工具因爲我之前沒有嘗試過屏幕截圖。
摘要:我想從HTML提取數據,暫時將其存儲在一個變量/會話/餅乾(數據更改每天幾次),然後能夠輸出重新格式化爲我自己的HTML/CSS樣式。
我不確定有一個更聰明的方法來做到這一點,因爲您沒有真正給我們足夠的背景或數據來處理。什麼是你正在檢索的網址或頁面的HTML是什麼樣的? – 2010-11-02 00:42:27
我已經添加了一些更多的細節/示例,謝謝讓我知道什麼會有所幫助。 – 2010-11-02 00:51:59
如果您需要通過表單或登錄導航站點,機械化非常棒。這是您在刮取HTML的個別頁面的折騰。我個人喜歡open-uri和Nokogiri,對於我所做的大部分工作。有更好但更復雜的HTTP客戶端比open-uri,但是Nokogiri很難被擊敗。一個好的替代HTTP客戶端是['Typhoeus'](http://www.pauldix.net/2009/01/ruby-http-client-library-performance.html)。 – 2010-11-02 02:07:02