2010-09-13 88 views
0

我現在處於以下情況。我試圖將一個凌亂的HTML代碼轉換爲一個漂亮而整齊的xml結構。用PHP刮掉凌亂的html網站

刮下網站的部分HTML代碼:

<p><span class='one'>week number</span></p> 

<p><span class='two'>day of the week</span></p> 
<table class='spreadsheet'> 
table data 
</table> 

<p><span class='two'>another day of the week</span></p> 
<table class='spreadsheet'> 
table data 
</table> 

<p><span class='one'>another week number</span></p> 

ETC 

現在我想用PHP創建以下XML結構:

<week number='week number'> 
<day name='day of the week'> 
    <data id='table data'>table data</data> 
</day> 

<day name='another day of the week'> 
    <data id='table data'>table data</data> 
</day> 
</week> 
<week number='another week number'> 
ETC 
</week> 

一直試圖簡單的HTML DOM方法,但不知道如何獲得下一個兄弟姐妹,並檢查它是一週中的新的一天,新的表格數據還是新的一週等。

我當然也對其他解決方案開放。

謝謝。

乾杯, Dandoen

+1

[Scrape web page contents](http://stackoverflow.com/questions/584826/scrape-web-page-contents) – 2016-02-25 16:56:58

回答

1

沒有銀彈。處理這種情況的典型方法是首先通過htmltidy過濾html,獲得可預測的標籤湯,然後將其提供給解析器(如DomDocument)。然後使用DomXPath來選擇你需要的節點,並組裝關聯數組的中間結構,最後將其轉換爲輸出xml文檔。提示:使用Firebug的「Copy XPath」功能來獲取節點的xpath表達式。

+0

我按照你的建議做了,用整潔來整理。但是從那裏開始,我又陷入了困境,正如我的問題所反映的那樣,我正在試圖解析的html中沒有真正的「樹」結構。因此,使用DomDocument是我已經在使用簡單的html dom類的地方。無論如何謝謝你的答案,但不幸的是,這將需要我投資幾個小時,並嘗試所有類型的東西:( – dandoen 2010-09-13 20:05:31

0

最「容易出錯」的方法恕我直言,是使用真正的瀏覽器進行刮取,如果使用Selenium RC進行遠程瀏覽器控制,這非常容易。查看我的示例代碼,使用jQuery刮取Google:http://github.com/tszming/Selenium-Google-Scrapper

大部分內容只需幾行代碼即可提取。