【发布时间】:2019-12-13 16:09:52
【问题描述】:
我正在抓取一些网页,其中我注意到 rvest(read_html,然后是 html_text)提供的结果与 RSelenium(getPageSource())提供的结果不同。
更具体地说,当涉及下拉菜单时,使用 html_text 只会为您提供选项的名称,而使用 RSelenium 您可以获得选择后将被定向到的页面的 url。
我的问题是:(1)为什么会有差异,差异的本质是什么? (2) 有没有办法获得与 RSelenium 相同的源文本提取,但使用更快的方法,如 rvest 包?
根据rvest vs RSelenium results for text extracting 的建议,我尝试使用 webdriver,一个 PhantomJS 实现,并且他们的 getSource 函数确实提供了与 RSelenium 相同的结果。然而,虽然这比 RSelenium 快,但它仍然比 rvest 慢得多。
library(rvest)
library(RSelenium)
library(webdriver)
library(tictoc)
library(robotstxt)
test_url <- "https://www.bea.gov"
robotstxt::paths_allowed(test_url)
# rvest
tictoc::tic()
resultA <- html_text(read_html(test_url))
tictoc::toc()
# RSelenium
tictoc::tic()
remDr <- remoteDriver(port = 4445L, browserName = "firefox")
remDr$open()
remDr$navigate(test_url)
resultB <- remDr$getPageSource(test_url)
tictoc::toc()
# webdriver
tictoc::tic()
pjs <- run_phantomjs()
ses <- Session$new(port = pjs$port)
ses$go(test_url)
resultC <- ses$getSource()
tictoc::toc()
您可以看到 resultA 与 resultB 和 resultC 不同。更具体地说,我的重点是从“工具”一词开始,这是用于选择本网站提供的有关“工具”的不同选项卡的下拉菜单的部分。
只显示一小块,在 rvest 中选择“BEARFACTS”是:
BEARFACTS\n \n \n
在 RSelenium 中,它类似于以下内容:
<li class=\"expanded dropdown\">\n <a href=\"https://apps.bea.gov/regional/bearfacts/\">BEARFACTS</a>\n
【问题讨论】:
-
请经常检查,网页的所有者是否允许抓取网页。
robotstxt::paths_allowed(test_url)产生FALSE,因此您不应将其用作示例。 -
感谢您的提醒!这是一个有用的包,我一定会使用。我已经相应地更改了示例。
标签: r web-scraping webdriver rvest rselenium