我一直與Nokogiri工作了幾天,我絕對崇拜它。一切工作都非常出色,直到我得到了一個要求使用data-reactid javascript屬性標記的網站。問題是,Nokogiri似乎與這個網站使用的屬性id格式(幾個時段,一些美元符號和一些其他無效的xml/css字符)混淆:Nokogiri:如何選擇在其ID中包含句點的屬性的值?
我需要刮的一個例子是:
<td data-reactid=".3.3.1:$contract_23.$=1$dataRow:0.1">94.280</td>
我所需要的屬性的內部值(94.280),用一個id」 .3.3.1:$ contract_23 $ = 1 $數據行:0.1"
通常在引入nokogiri我們將通過做類似的選擇:
doc.css("type[attributename=attributeid]")
在我的例子那就是:
doc.css("td[data-reactid=.3.3.1:$contract_23.$=1$dataRow:0.1]")
但無論我做什麼,以逃避無效字符,它不斷地說我有我的等號後無效字符登錄:
的錯誤信息以上代碼:
nokogiri-1.4.3.1/lib/nokogiri/css/parser.rb:78:in `on_error': unexpected '.3' after 'equal'
我已經試過:
A)獲取我的字符串定義爲變量和強制進入一個字符串
b)用反斜槓逃逸它(0.3。[...])
c)用散列加前綴它(#.3.3 [...])
d)使用CGI escapedString
E)將其置於內部 '%{}' 例如它逃逸 '%{3.3 [...]}'
無論我做什麼,我都會收到相同的信息(除了選項e之外給我一個完全不同的錯誤信息:
: no .<digit> floating literal anymore; put 0 before dot
你們可以幫助我得到正確的價值與這樣一個奇怪的命名屬性?
哇,這是快!非常感謝!我使用HTML作爲解析器,並且您的方法確實有效!雙引號內的單引號的魔力!這是一種享受! – Antonio 2014-10-02 00:01:24
@Antonio,不客氣。請注意,如果要將某些內容插入到字符串中,則使用雙引號。'planet =「地球」;放置「hello#{planet}」'因爲你不需要插入任何內容到你的css選擇器中,所以在外部使用單引號和在內部使用雙引號會更有意義:''td [data-reactid =「。3.3.1:$ contract_23。$ = 1 $ dataRow:0.1」]''裏面的雙引號與html中使用的雙引號具有一定的匹配對稱性。 – 7stud 2014-10-02 00:18:57
@Antonio,至於'%q {}'和'%Q {''',它們不能在字符串中使用,但你可以這樣做:'%q {td [data-reactid =「。3.3 .1:$ contract_23。$ = 1 $ dataRow:0.1「]}'但是如果使用單引號更清晰,那麼沒有理由在這裏使用'%q {}'(或'%Q {}')。 – 7stud 2014-10-02 00:20:40