2016-04-19 3 views
3

Я пытаюсь с помощью rvest пакет, чтобы очистить таблицу:Использование "rvest" выскабливание HTML таблицу

library(rvest) 

x <- read_html ("http://www.jcb.jp/rate/usd04182016.html") 
x %>% html_node(".CSVTable") %>% html_table 

Url элементы выглядят любит:

<table class="CSVTable"> 
<tbody>...</tbody> 
<tbody class>...</tbody> 
</table> 

Почему я не возникает ошибка "Нет совпадений"?

+0

Посмотрите на '? Html_table' -« Разбор таблицы html ... ». Затем попробуйте' x%>% html_table'. Вы видите, что таблица, которую вы видите на странице, не может быть проанализирована с помощью 'html_table' – SymbolixAU

ответ

4

Вы в удаче (вроде). Сайт использует динамические запросы XHR для создания этой таблицы, но указанный запрос также является CSV-файлом.

library(rvest) 
library(stringr) 

pg <- read_html("http://www.jcb.jp/rate/usd04182016.html") 

# the <script> tag that does the dynamic loading is in position 6 of the 
# list of <script> tags 

fil <- str_match(html_text(html_nodes(pg, "script")[6]), "(/uploads/[[:digit:]]+\\.csv)")[,2] 

df <- read.csv(sprintf("http://www.jcb.jp%s", fil), header=FALSE, stringsAsFactors=FALSE) 

df <- setNames(df[,3:6], c("buy", "mid", "sell", "symbol")) 

head(df) 
##  buy  mid  sell symbol 
## 1 3.6735 3.6736 3.6737 AED 
## 2 68.2700 69.0700 69.8700 AFN 
## 3 122.3300 122.6300 122.9300 ALL 
## 4 479.5000 481.0000 482.5000 AMD 
## 5 1.7710 1.8110 1.8510 ANG 
## 6 165.0600 165.3100 165.5600 AOA 

Но это также означает, что вы можете просто получить CSV непосредственно:

read.csv("http://www.jcb.jp/uploads/20160418.csv") 

(только формат даты должным образом в ваших запросов).

Смежные вопросы