2012-07-14 23 views
3

我已經寫了一個紅寶石刮網。但是我刮的網站改變了他們的設計,所以我的刮板正在失敗。是否有一個聰明而簡單的解決方案來解決這種刮刀的固有問題? (對於如..使用某種模式匹配,XPath的,比較DOM髮辮...等)如何讓我的網站設計變更寬容?

EM.run { 
http_request = EM::HttpRequest.new(url, opts).get 
http_request.callback { |body| 
doc = Nokogiri.parse(body.response) 
doc = Nokogiri::HTML(body.response) 
puts doc.css(".poster_information") 
puts doc.css(".date") 
puts doc.css(".comment_block") 
} 

在上述示例代碼段我刮海報信息的上述網站,發佈日期及評論在一個網頁的CSS選擇器的幫助下發布。現在假設網站管理員更改論壇的佈局。 CSS選擇器將失敗,因此我的整個刮板將失敗。每當網站的佈局發生變化時,我都不想更新我的刮板。那麼,有沒有什麼方法可以讓我的刮板檢測到網站佈局的變化,並且能夠正確地找到所需目的地的路徑?因爲我無法知道網站何時會改變..我只是想讓我的刮板自動和容錯

+1

要求網站爲您提供API? – Seth 2012-07-14 01:38:45

+0

如果沒有您的源代碼或您想要解析的代碼和網站的詳細說明,我們無法幫助您。 – 2012-07-14 18:05:40

+0

我編輯的問題...提供了一個代碼片段和網站即時通訊試圖解析... – 2012-07-16 22:25:02

回答

0

您可以編寫定期運行的集成測試,以在頁面更改時通知您。如果頁面結構頻繁更改,我還會將選擇器模式提取到配置中,並可能構建一個UI以輕鬆編輯我想要實際掃描的選擇器。作爲一個方面說明,你可能也有興趣檢查出capybara來控制更高級別的刮刀。如果您還需要JS功能,則可以使用capybara-webkit