2011-03-05 110 views
0

我正在做一些網頁抓取並遇到了幾個我想查詢的數據表。目前,我到:使用SQL查詢XML

$url = 'http://finance.yahoo.com/q/op?s=QQQQ&m=2012-04'; 
$html = @DOMDocument::loadHTMLFile($url); 
$xml = simplexml_import_dom($html); 
$results = $xml->xpath('//table[@class="yfnc_datamodoutline1"]'); 
var_dump($results); 

產生的結果:http://pastebin.com/6p3L2Kcc

這是秩序井然的HTML表格的數據,與TH和TD的一切。我想用這樣的:

$sql = 'SELECT Last,Open_Int FROM TABLE1 WHERE Last>25 AND Symbol LIKE "%C%"'; 
$results = $xmltable->sql($sql); 
while($result = $results->fetch_assoc()) 
    echo $result['Last'] . " -- " . $result['Open_Int'] . "\n"; 

沒有任何創意,我可以寫的類來解析HTML表,採取的第一行,創建一個sqlite的表,選擇其他行,並把它們插入到聲明。但是,你知道一個更好的方法來做到這一點,還是有一些我沒有看到的強大的PHP函數?

更新:也許這裏的範圍太大了。我會很高興看到一個鏈接到一個庫或建議將HTML表格放入一個(適當的)XML表格。

+0

是否有充分的理由說明爲什麼要使用DOMDocument和SimpleXML加載文檔? – 2011-03-05 19:44:14

+0

我所指的「簡單」方法是:使用此方法獲取數據http://www.phpro.org/examples/Parse-HTML-With-PHP-And-DOM.html,然後在數據庫中插入數據。 問題是:有沒有比這更好的方式來完成它? – 2011-03-05 19:46:21

+0

@Mark:不知道,我不知道simplexml直接接受html,謝謝 – 2011-03-05 19:48:34

回答

1

答案取決於您的更大需求。這裏有三個問題可以充實這些:

1)數據讀取和寫入的頻率是多少?

2)你保留舊版本還是隻有最新的要求?

3)將數據與其他數據進行比較?

在一個案例中,讓我們假設#1的答案是「多讀」,而對#3的答案是「是」。在這種情況下,將XML結果放入SQL表中以進行頻繁而靈活的查詢可能是非常值得的。

但是,在另一種情況下,假設#2的答案是「否」,並且#3的答案是「否」 - 您只保留最新的檢索並且不要將其與任何內容進行比較。在這種情況下,您可以將其粘貼到文件中並根據需要進行檢索(#1變得無關緊要)。

編輯回覆評論中的問題:假設你想把它放到數據庫中,你鏈接的顯示器顯示一組嵌套的對象/數組。你「走樹」來剝離嵌套的對象,剝離它們的屬性併發出單個插入到特定的表中。

+0

我同意你的迴應。但是,您所描述的是在數據處於無法格式之後使用它。我的問題是詢問如何將數據(目前以HTML格式,從網上抓取)轉換爲有用的格式。 – 2011-03-05 19:43:08