2011-07-12 73 views
-1

如何解析表中的文檔並將其作爲JSON文件發送到另一個數據庫。解析表中的文檔

描述: 我已經使用海葵爬網並將數據從網站中提取到表格中。我現在需要解析它並將其作爲JSON文件傳輸到另一臺服務器。我想,我將不得不首先將表中的文檔轉換爲可以解析並轉換爲json文件的nokogiri文檔。任何想法如何將文檔轉換成nokogiri文檔,或者如果任何人有任何其他想法來解析它並將其作爲json文件發送?

+0

爲什麼要將HTML頁面表示爲JSON? –

+0

因爲我將它存儲在一個不同的rails應用程序庫中。這不是一個html頁面。我將通過解析的文檔作爲JSON而不是整個HTML文檔。 – noobie

+0

那麼你在尋找比http://www.google.com/search?q=nokogiri+tutorial更多的東西嗎?如果是這樣,你到底在找什麼? –

回答

1

好吧我很早就找到了答案,我基本上利用REST將消息從一個應用程序發送到另一個應用程序,我把它作爲一個散列發送出去。而顯而易見的,我用nokogiri來解析表格。

def post_me 
    @page_hash = page_to_hash 

    res = Net::HTTP.post_form(URI.parse('http://127.0.0.1:3007/element_data/save.json'),@page_hash) 
    end 

用於使用net/http將散列從一個應用程序發送到另一個應用程序。

def page_to_hash 
    require 'rubygems' 
    require 'nokogiri' 
    require 'open-uri' 
    require 'domainatrix' 

    #page = self.page.sub(/^<!DOCTYPE html(.*)$/, '<!DOCTYPE html>') 
    hash={} 
    doc = Nokogiri::HTML(self.page) 
    doc.search('*').each do |n| 
     puts n.name 
    end 

使用Nokogiri解析我的模型中的頁表。頁表有整個網頁。

file_type = [] 

    file_type_data=doc.xpath('//a/@href[contains(. , ".pdf") or contains(. , ".doc") 
          or contains(. , ".xls") or contains(. , ".cvs") or contains(. , ".txt")]') 
    file_type_data.each do |href| 
     if href[1] == "/" 
     href = "http://" + website_url + href 
     end 
     file_type << href 
    end 
file_type_str = file_type.join(",") 
    hash ={:head => head,:title => title, :body => self.body, 
     :image => images_str, :file_type => file_type_str, :paragraph => para_str, :description => descr_str,:keyword => key_str, 
     :page_url=> self.url, :website_id=>self.parent_request_id, :website_url => website_url, 
     :depth => self.depth, :int_links => @int_links_arr, :ext_links => @ext_links_arr 
    } 

一個簡單的解析示例和我如何形成我的哈希。

1

Nokogiri是HTML解析的最佳選擇,但是爲了將其轉換爲JSON,您可以根據自己的情況自行決定。

一旦你通過Nokogiri解析它,它不應該非常難以提取你需要的元素並生成代表它們的JSON。你所做的並不是一件很常見的事情,所以你必須彌合Nokogiri和你用來生成JSON的任何寶石之間的差距。

+0

謝謝eric。如何在表格中的文檔上使用nokogiri。我有一個結果表,我在存儲HTML頁面。現在我需要解析它。任何幫助,我該怎麼做。 – noobie

+0

@noobie:我認爲你的意思是一個HTML表格?你應該看看xpath,這是一種簡單的(有點通用的)語法,用於從DOM樹中選擇元素。您可以使用Nokogiri附帶的xpath函數來獲取特定的元素。一個與表格相關的例子就是抓住所有的行。這個xpath語法是:'// table [@ id =「foo」]/tr'。希望有所幫助! –