使用R中的XML在html中抓取数据时提取“样式”信息

时间:2012-04-28 04:33:17

标签: xml r web-scraping

我使用下面的脚本尝试从PDF转换的HTML文件中提取数据。

temp.html <- scan(file=filename,what="character")
pagetree <- htmlTreeParse(temp.html, error=function(...){}, useInternalNodes = TRUE)
tx.raw <- getNodeSet(pagetree,"//div")

tx.raw创建一个列表,其中一个显示如下:

tx[[170]]

[[170]]
<div style="position:absolute;top:985;left:748">
  <nobr>
    <span class="ft03"> 




971.72
 </span>
  </nobr>
</div> 

我需要的信息在span内(即971.72),但我还需要style中的div告诉我这些数据的确切位置span位于pdf文件中。我怎样才能提取样式信息呢?感谢。

1 个答案:

答案 0 :(得分:0)

我会用简单的正则表达式

来做到这一点
sub('.*style="([0-9a-z;:]*)".*', '\\1', t)

t将相应的HTML部分保存为文本。


基于演示HTML部分的冗长示例:

## loading your demo HTML part to one line
t <- paste(readLines(textConnection('<div style="position:absolute;top:985;left:748">
  <nobr>
    <span class="ft03">




971.72
 </span>
  </nobr>
</div>')), collapse = '')

## let us extract some parts!
library(XML)
t.html <- htmlTreeParse(t, useInternalNodes = TRUE)
t.val <- xpathApply(t.html, '//div', xmlValue)
t.val <- gsub('\\s', '', t.val)
t.style <- sub('.*style="([0-9a-z;:]*)".*', '\\1', t)

根据您之前解析HTML的方式,当然可以消除上述大部分内容。

<强>结果:

> t.val
[1] "971.72"
> t.style
[1] "position:absolute;top:985;left:748"

提取topleft可以类似地解决,我只是不处理它,因为我不确定是否例如lefttop是静态字符串。