Доступ к полю структуры (пакет XML)
Я получаю эту структуру, используя HTMLTreeParser, и мне нужно, чтобы текст содержался на странице
doc <- htmlTreeParse(url, useInternalNodes = FALSE)
doc
$file
[1] "http://www.google.com/trends/fetchComponent?q=asdf,qwerty&cid=TIMESERIES_GRAPH_0&export=3"
$version
[1] ""
$children
$children$html
<html>
<body>
<p>// Data table response google.visualization.Query.setResponse([INSERT LOT OF JSON HERE])</p>
</body>
</html>
attr(,"class")
[1] "XMLDocumentContent"
Я ищу что находится в блоке "p". Я не нашел ничего, что могло бы помочь мне сегодня.
Итак, как я могу получить эти данные?
1 ответ
Решение
Если вы хотите запустить XPath для документа, вам нужно установить useInternalNodes = TRUE
(см. документацию по этому аргументу). Следующий код поможет вам начать работу с XPath.
[Примечание: когда я запускаю ваш код, я получаю страницу с ошибкой, а не документ, который вы получаете.]
library(XML)
url <- "http://www.google.com/trends/fetchComponent?q=asdf,qwerty&cid=TIMESERIES_GRAPH_0&export=3"
doc <- htmlTreeParse(url, useInternalNodes = T)
# XPath examples
p <- doc["//p"] # nodelist of all the <p> elements (there aren't any...)
div <- doc["//div"] # nodelist of all the <div> elememts
scripts <- doc["//script"] # nodelist of all the <script> elements
b.script <- doc["//body/script"] # nodelist of all <script> elements within the <body>
# title of the page
xmlValue(doc["//head/title"][[1]])
# [1] "Google Trends - An error has been detected"
По сути, вы можете использовать строку XPath, как если бы это был индекс в документе. Так что в вашем случае,
xmlValue(doc["//p"][[1]])
должен вернуть текст, содержащийся в (первом) <p>
элемент в doc