2010-09-13 126 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

大部分内容只需几行代码即可提取。