如何读取HTML表和帐户中的单元格中的换行符

时间:2016-08-01 20:36:39

标签: html r xml

我有一个程序的HTML表格输出,用于将单元格中的值与<div class="parallax-container> <div class="parallax"> <img src="http://wallpapercave.com/wp/JRiV1lH.png"> </div> </div> 分开。我尝试过使用<br>XML::readHTMLTable,但他们将这些值组合在一起而没有任何分隔符。我需要它们以逗号分隔,但我没有看到这些函数的任何参数来解释这一点。我已经发布了以下文件的伪造示例。目前,它会读入两个向量htmltabc("ABC","DEF","GHI"),但我需要将c("JKLMNO","PQR","STU")元素改为"JKLMNO"

"JKL,MNO"

2 个答案:

答案 0 :(得分:0)

library(rvest)
library(dplyr)

doc <- read_html("<table>
  <tr>
    <td>
      ABC<br/>
    </td>
    <td>
      DEF<br/>
    </td>
    <td>
      GHI<br/>
    </td>
  </tr>
  <tr>
    <td>
      JKL<br/>
      MNO<br/>
    </td>
    <td>
      PQR<br/>
    </td>
    <td>
      STU<br/
    </td>
  </tr>
</table>")

tab <- html_table(doc)[[1]] 

mutate(tab, X1=gsub("[\r\n][[:space:]]+", ",", X1))
##        X1  X2  X3
## 1     ABC DEF GHI
## 2 JKL,MNO PQR STU

<强>更新

对于那些使用不同格式的HTML并且可能不会感觉到张贴压力的人,如果你有,请说:

doc <- read_html("<table>
  <tr>
    <td>ABC<br/></td>
    <td>DEF<br/></td>
    <td>GHI<br/></td>
  </tr>
  <tr>
    <td>JKL<br/>MNO<br/></td>
    <td>PQR<br/></td>
    <td>STU<br/</td>
  </tr>
</table>")

上述解决方案无效,因为它与OP的数据不同。我知道......这是令人震惊的

如果是这种情况,复制和粘贴解决方案肯定比键入新问题更容易,您可以使用以下内容:

library(rvest)
library(dplyr)
library(purrr)

map(1:3, function(col) {
  html_nodes(doc, xpath=sprintf(".//tr/td[%d]", col)) %>% 
  map_chr(~paste0(html_nodes(., xpath=".//text()"), collapse=","))
}) %>% 
  set_names(sprintf("X%d", 1:3)) %>% 
  as_data_frame()

但是 - 足够惊人 - 如果你在TD标签中有不同的标签和数据,或者必须使用更复杂的表格结构,此解决方案可能还需要适应。头脑,难以置信。

答案 1 :(得分:0)

我遇到了这个问题,因为X中的
被删除:

$headers = [
    'Access-Control-Allow-Origin'      => '*',
    'Access-Control-Allow-Methods'     => 'POST, GET, OPTIONS, PUT, DELETE',
    'Access-Control-Allow-Credentials' => 'true',
    'Access-Control-Max-Age'           => '86400',
    'Access-Control-Allow-Headers'     => 'Content-Type, Authorization, X-Requested-With',
 ];

if ($request->isMethod('OPTIONS')) {
    return response()->json('{"method":"OPTIONS"}', 200, $headers);
}

$response = $next($request);

foreach ($headers as $key => $value) {
    $response->header($key, $value);
}

return $response;

我解决了以下问题:

xTabs <- XML::readHTMLTable(X)

如果我想要'
',则可以进行查找并替换为xTab。但是,我更喜欢'\ n'。