将HTML/XML和PDF文件格式读入R中

8

我正在尝试通过将PDF文件作为HTML/XML文件读入R中来解析它。我知道可以使用pdftools包将其读入。然而,如果我只是将链接读入HTML/XML文件,我无法访问其中的数据。

library(xml2)
library(XML)
html_string="https://mchb.hrsa.gov/whusa11/hstat/hsrmh/downloads/pdf/233ml.pdf"
ht <-read_html(html_string)
nodes<-xml_find_all(ht, ".//body")


> ht
{xml_document}
<html>
 [1] <body><p>%PDF-1.6\r%\xe2ãÏÓ\r\n83 0 obj\r&lt;&gt;stream\r\nhÞ\u009cTË\u008eÓ@äSú'»çÑ3\u0096V+EA\\"V«$·\u ...
 [2] <html><p>\u009d@a ö¯\u0088Î÷Ü\\&amp;ÔÈýÐâÿZO^"j[FoQ)ÒÇq\n\u009b\u008dx\u0085\u008eß±µ\u009bõo\t­\u008f6¢ ...

> ht[1]
  $node
  <pointer: 0x00000000047901a0>

我试过以下函数
xmlTreeParse
xmlToList
xmlParse

如何在内部访问XML文档内容字符串? 我正在尝试将它们转换为可以操作的对象。


我如何访问名为“ht”的xml_document的文本?并能够将其内部的文本读取为对象。 - jessica
2个回答

3
使用 pdfx 的一种可能的解决方案。
# download file to your home dir
download.file("https://mchb.hrsa.gov/whusa11/hstat/hsrmh/downloads/pdf/233ml.pdf","233ml.pdf")

# get packages
library(remotes)
remotes::install_github("sckott/extractr")
library(extractr)

#parse
pdfx(file="233ml.pdf", what="parsed")

我正在进行这些健康链接的网络爬虫。不幸的是,我无法确定它是PDF还是其他文件格式。因此,我不能使用它。这个链接可能是PDF或HTML文件。这就是为什么我需要读取它并查看内部内容的原因。 - jessica
1
你不能在网页抓取过程中为PDF和HTML文件打标签,然后根据它们的标签进行处理吗? - ava
不确定您的意思。通常情况下,链接没有 .pdf 扩展名。HTML 标签是类 <a href="link">。链接本身可能有,也可能没有 .pdf 扩展名,告诉您它是一个 pdf 文件。 - jessica
你能否添加一个包含不同示例的测试数据集? - ava

2

你的xml_document ht 包含1个body和13个html元素。你可以使用rvest中的html_nodehtml_nodes来提取所需的部分。

"Original Answer"翻译成"最初的回答"
library(xml2)
library(XML)
library(rvest)
library(dplyr)

html_string="https://mchb.hrsa.gov/whusa11/hstat/hsrmh/downloads/pdf/233ml.pdf"
ht <-read_html(html_string)

ht %>% html_nodes("html") # look at all html nodes
ht %>% html_node("body") # look at body node 

根据您的问题,看起来您想将body节点作为文本获取,是吗?
您可以使用以下代码实现:
```javascript document.body.textContent ```
这将返回body节点的文本内容。
ht %>% html_node("body") %>% as.character -> text #get body node as text
text    
[1] "<body><p>%PDF-1.6\r%\xe2ãÏÓ\r\n83 0 obj\r&lt;&g...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接