在Python或R中读取动态网页html

时间:2018-03-18 12:01:14

标签: python r selenium web-scraping rvest

我正在尝试自动化抓取Investing.com Economic Calendar等网页表格的过程 如果我们只对默认选项卡感兴趣,那么这对R来说相当简单,默认选项卡显示今天的日历。这是R代码:

library(rvest)
library(dplyr)

Econ_webpage <- read_html("https://www.investing.com/economic-calendar/")

Indicators  <- Econ_webpage %>% html_nodes("#economicCalendarData") %>% 
html_table(fill = TRUE)  %>% .[[1]] %>% .[-(1:3),-  c(match("Imp.",colnames(.)),ncol(.))]

产生下面显示的所需结果。

> head(Indicators)
   Time Cur.                             Event Actual Forecast Previous 
4 19:50  JPY           BoJ Summary of Opinions                          
5 19:50  JPY              Exports (YoY)  (Feb)            1.9%    12.3% 
6 19:50  JPY              Imports (YoY)  (Feb)           17.1%     7.9% 
7 19:50  JPY              Trade Balance  (Feb)           -100B    -944B 
8 20:01  GBP Rightmove House Price Index (MoM)                     0.8% 
9 21:30  CNY         House Prices (YoY)  (Feb)                     5.0%

但是,如果我想在选项卡中刮掉表明天我需要使用Selenium驱动程序。我已经尝试过RSelenium,但无法让它在我的机器上工作,所以我在Python中尝试过Selenium。我在Python中使用以下代码:

import selenium
from selenium import webdriver 

driver.Chrome(executable_path=PATH_TO_CHROMEDRIVER)
driver.get("https://www.investing.com/economic-calendar/")
driver.find_element_by_id("timeFrame_tomorrow").click()
html = driver.page_source

现在我在字符串中包含了所需的表数据的html,我根本不知道如何有效地进行分析以生成R代码的结果。我可以以某种方式调用rpy2包,它允许在Python中使用R代码或其他人知道以上述相同的形式提取表的更简单方法吗?我该如何解析这个html字符串?

1 个答案:

答案 0 :(得分:1)

RSelenium R我们可以尝试

library(RSelenium)
library(XML)

rD <- rsDriver()
remDr <- rD[["client"]]
remDr$navigate("https://www.investing.com/economic-calendar/")
option <- remDr$findElement("id", "timeFrame_tomorrow")
option$clickElement()
res <- readHTMLTable((remDr$getPageSource()[[1]]))$economicCalendarData
res <- res[-1,]
head(res)
#   Time Cur. Imp.                       Event Actual Forecast Previous 
#2 02:30  GBP      Investing.com GBP/USD Index                    46.5% 
#3 02:30  USD         Investing.com Gold Index                    65.6% 
#4 02:30  USD      Investing.com S&P 500 Index                    70.7% 
#5 02:30  CAD      Investing.com USD/CAD Index                    41.8% 
#6 02:30  CHF      Investing.com USD/CHF Index                    53.8% 
#7 02:30  AUD      Investing.com AUD/USD Index                    47.9% 


remDr$close()
rD[["server"]]$stop()