2013-04-10 56 views
0

我只是嘗試代理網站與解析使用nokogiri。Nokogiri失去屬性

我的控制器動作

des show 
    @url    = 'http://www.femmeactuelle.fr/' 
    @with_nokogiri  = Nokogiri::HTML(open(@url).read).to_html 
    @without_nokogiri = open(@url).read 

    if params.has_key? :nokogiri 
    render text: @with_nokogiri, layout: false 
    else 
    render text: @without_nokogiri, layout: false 
    end 
end 

如果我用?引入nokogiri = foo的這個動作,身體失去其ID。任何想法是什麼原因? 我只想與瀏覽器在用nokogiri解析後看到的html相同。

+0

你能澄清你'失去身份證'的意思嗎?你看到了什麼結果,你期望什麼? – PinnyM 2013-04-10 18:32:36

+0

我已更新該問題。 – Awea 2013-04-10 18:42:09

+0

仍然沒有關注你,你可以發佈你看到的錯誤/不同的HTML代碼片段,以及你期望的樣子嗎? – PinnyM 2013-04-10 18:45:36

回答

2

我無法複製Nokogiri在有效HTML中從<body>標籤剝離id參數的問題。這裏是我的引入nokogiri /的libxml和紅寶石事項:

nokogiri: 1.5.9 
ruby: 
    version: 1.9.3 
    platform: x86_64-darwin10.8.0 
    description: ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin10.8.0] 
    engine: ruby 
libxml: 
    binding: extension 
    compiled: 2.7.7 
    loaded: 2.7.7 

這裏引入nokogiri的一個簡單的測試:

doc = Nokogiri::HTML('<html><body id="foo">bar</body></html>') 

puts doc.to_html 

返回:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body id="foo">bar</body></html> 

當我解析 'http://www.femmeactuelle.fr/',引入nokogiri的errors方法返回一些錯誤,包括<head><body>。 Nokogiri會在文檔被破壞時嘗試修復文檔,這可能會導致標籤被移動,或者,正如我在這種情況下懷疑的那樣,參數會丟失。

Validating the document返回各種錯誤,所以我認爲問題出在Nokogiri之外。如果您想在將它傳遞給Nokogiri之前嘗試修復它,可以通過HTMLTidy發送文件,然後查看Nokogiri是否可以更好地理解它。否則,花一些時間仔細研究HTML,找出什麼是壞的,然後編寫一些字符串操作代碼來修補它。

您無法將瀏覽器呈現的頁面源與Nokogiri等解析器輸出的內容進行比較。他們是非常不同的代碼片段,目標非常不同。瀏覽器想要使頁面呈現某些內容,並且具有處理破碎的HTML的各種後備功能。解析器沒有,因爲它的工作是準確地將HTML或XML轉換爲它的真實結構,所以我們可以通過它進行挖掘。