Я работаю над переформатированием вывода HTML из поискового запроса для менеджера инвентаризации для ряда автодилеров. Нет прямого доступа к БД, нет информации от создателей сервиса, поэтому я решил попытаться проанализировать и переформатировать данные с помощью Nokogiri и создать новые страницы результатов на основе поискового запроса.
При первой загрузке страницы я просто использую поиск по умолчанию для генерации первых результатов.
Чтобы поиск работал, я отправляю запрос на 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
Я знаю, что должен быть разумный способ сделать это.
Edit:
Пример 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:
К сожалению, это старый код, который почти полностью основан на таблицах, имеет встроенные стили и не имеет классов или идентификаторов в большинстве областей.
Пример CSS-селектора:
td:nth-child(5) .ForeColor4
Селектор XPath:
//td[(((count(preceding-sibling::*) + 1) = 5) and parent::*)]//*[contains(concat( " ", @class, " " ), concat( " ", "ForeColor4", " " ))]
Я также рассматривал механизацию или hpricot как возможности, но я не знаю о лучших инструментах для этой работы, так как раньше я не пытался делать скриншоты.
Сводка : я хочу извлечь данные из HTML, временно сохранить их в переменной / session / cookie (данные меняются несколько раз в день), а затем иметь возможность переформатировать вывод в мой собственный стиль HTML / CSS.