2011-04-18 66 views
0

我使用restclient和nokogiri來解析一些很好的html,但有一塊信息存儲在一個js(jquery)變量中,我需要返回,而我不是確定如何解析它。我可以使用Nokogiri來解析JavaScript塊,但我需要它的一個子集,這可能很簡單,但我不知道如何去做。我可能可以將它正則表達式,但我假設有一個簡單的方法來使用JS來請求它。ruby​​ nokogiri restclient拖動javascript變量

@resource = RestClient.get 'http://example.com' 

doc = Nokogiri::HTML(@resource) 

doc.css('script').each do |script| 
    puts script.content 
end 

我試圖讓:

 <script type="text/javascript"> 
      $(function(){ 
       //this is it 
       $.Somenamespace.theCurrency = 'EUR'; 
       //a lot more stuff 

回答

3

不知道是否適合,但可以按如下方式進行檢索:

IRB(主要):017:0>

string 
=> "<script type=\"text/javascript\"> $(function(){$.Somenamespace.theCurrency = \"EUR\"}); " 

IRB(主):018:0>

string.scan(/\$\.Somenamespace\.(.*)}\);/) 
=> [["theCurrency = \"EUR\""]] 
1

Nokogiri是一個XML和HTML解析器。它不會解析CDATA或節點的文本內容,但它可以爲您提供內容,讓您使用字符串解析或正則表達式來獲取所需的數據。

在Javascript的情況下,如果它嵌入在頁面中,則可以獲得父節點的text。通常說起來很簡單:

js = doc.at('script').text 

如果在頁面<head>塊通常<script>標籤。如果有多個腳本標記,則必須擴展訪問器以檢索正確的節點,然後逐漸消失。

當腳本被動態加載時,它會變得更加令人興奮,但是仍然可以通過解析腳本的src參數中的URL來獲取數據,然後檢索它並重新處理。

有時Javascript嵌入到其他標籤的鏈接中,但它只是前兩種方法獲取腳本並處理它的另一種方法。