使用R中的xml包提取特定的HTML元素

时间:2013-01-09 11:45:23

标签: html r parsing

我正在使用R和xml包来解析存储在html文件中的数据。使用来自另一个问题(https://stackoverflow.com/a/1849388/1409652)的建议,我使用readHTMLTable函数烹饪气体。

我有一个问题,就是感兴趣的html表有两个标题。其中一个没有被readHTMLTable拾取并提供了一些与数据相关的单元的识别信息(这些信息在所有不同的html文件中有所不同,因此我需要读取它们而不是仅仅放入默认值)。

我认为我需要在html文件的xml包中指向一个函数并定位我想要的特定行。不幸的是,我不知道哪个功能和我对这个术语的了解并不是很好。我已经在下面放了一个HTML代码的示例,但没有包含值,因为它们很敏感,我可以交换一些虚拟数据并发布它,如果它有用。因此,包含“Period”,“Volume”,“Tariff”的标题正常,表格中的所有数据都是如此。包含“Unit1”,“Unit2等”的标题未通过。

<thead> 
<tr> 
<th class="center" colspan="1" rowspan="1"></th><th class="center" onmouseover="javascript:Tip('Unit1');" onmouseout="javascript:UnTip('');" colspan="4" rowspan="1">Unit1</th><th class="center" onmouseover="javascript:Tip('Unit2');" onmouseout="javascript:UnTip('');" colspan="4" rowspan="1">Unit2</th><th class="center" onmouseover="javascript:Tip('Unit3');" onmouseout="javascript:UnTip('');" colspan="4" rowspan="1">Unit3</th><th class="center" onmouseover="javascript:Tip('Others');" onmouseout="javascript:UnTip('');" colspan="4" rowspan="1">Others</th> 
</tr><tr> 
<th class="left" colspan="1" rowspan="1">Period</th><th class="left" colspan="1" rowspan="1">Volume</th><th class="left" colspan="1" rowspan="1">%</th><th class="left" colspan="1" rowspan="1">Tariff</th><th class="left" colspan="1" rowspan="1">%</th><th class="left" colspan="1" rowspan="1">Volume</th><th class="left" colspan="1" rowspan="1">%</th><th class="left" colspan="1" rowspan="1">Tariff</th><th class="left" colspan="1" rowspan="1">%</th><th class="left" colspan="1" rowspan="1">Volume</th><th class="left" colspan="1" rowspan="1">%</th><th class="left" colspan="1" rowspan="1">Tariff</th><th class="left" colspan="1" rowspan="1">%</th><th class="left" colspan="1" rowspan="1">Volume</th><th class="left" colspan="1" rowspan="1">%</th><th class="left" colspan="1" rowspan="1">Tariff</th><th class="left" colspan="1" rowspan="1">%</th> 
</tr> 
</thead>
<tbody>…all the data…</tbody>

总而言之,有没有人对如何使用R中的xml包提取上述html中的Unit信息有任何指示(尽管这是最好的方法,但是很高兴使用其他包)?

1 个答案:

答案 0 :(得分:1)

我所需要的只是一些学科知识; - )

使用xpath语法我设法使用以下内容获取单元名称列表:

xpathSApply(doc, "//th[@class='center']/text()")

相信通过解决这些问题,我可以提高效率。