在抓取 html 页面之前,是否需要在 rvest 中使用 read_html?
Is there a need to use read_html in rvest before scraping an html page?
我正在使用 rvest 抓取网页。
我曾经用 url 打开一个会话并直接调用函数,例如 html_node()
.
我注意到我看到的大多数示例在分析页面内容之前先阅读页面。
我测试了这两个选项并测量了系统运行时间,没有发现明显差异。
谁能告诉我是否真的需要用 read_html()
提前阅读整个页面?
这是一个示例测试
library(rvest)
url="https://cran.r-project.org/doc/manuals/r-release/R-lang.html"
sess=html_session(url )
system.time(html_nodes(sess,"div"))
# user system elapsed
# 0.02 0.00 0.02
> system.time(html_nodes(read_html(sess),"div"))
# user system elapsed
# 0.02 0.00 0.02
谢谢
确实,你的两个调用是等价的。 html_nodes
以 url 作为第一个参数只是在 read_html(url)
上调用 html_nodes
,如您所见。您的第一次调用使用 html_nodes.default
,第二次调用 html_nodes.session
.
> getFromNamespace("html_nodes.session","rvest")
function (x, css, xpath)
{
html_nodes(xml2::read_html(x), css, xpath)
}
<environment: namespace:rvest>
我仍然更喜欢 read_html
的主要原因是我经常在一个页面上执行多个操作(读取一些节点,然后读取其他一些节点并编译所有信息)。使用 read_html
一次以执行多个 html_nodes 将在长 运行.
中更快
library(rvest)
url="https://cran.r-project.org/doc/manuals/r-release/R-lang.html"
sess=html_session(url )
no_read <- function(sess){
html_nodes(sess,"div")
html_nodes(sess,"p")
}
do_read <- function(sess) {
p <- read_html(sess)
html_nodes(p,"div")
html_nodes(p,"p")
}
library(microbenchmark)
microbenchmark(no_read(sess),do_read(sess))
Unit: milliseconds
expr min lq mean median uq max neval
no_read(sess) 41.42506 44.06154 55.05718 46.62327 66.03544 190.4596 100
do_read(sess) 28.71807 31.33751 42.38105 33.21593 47.32962 240.6938 100
我正在使用 rvest 抓取网页。
我曾经用 url 打开一个会话并直接调用函数,例如 html_node()
.
我注意到我看到的大多数示例在分析页面内容之前先阅读页面。
我测试了这两个选项并测量了系统运行时间,没有发现明显差异。
谁能告诉我是否真的需要用 read_html()
提前阅读整个页面?
这是一个示例测试
library(rvest)
url="https://cran.r-project.org/doc/manuals/r-release/R-lang.html"
sess=html_session(url )
system.time(html_nodes(sess,"div"))
# user system elapsed
# 0.02 0.00 0.02
> system.time(html_nodes(read_html(sess),"div"))
# user system elapsed
# 0.02 0.00 0.02
谢谢
确实,你的两个调用是等价的。 html_nodes
以 url 作为第一个参数只是在 read_html(url)
上调用 html_nodes
,如您所见。您的第一次调用使用 html_nodes.default
,第二次调用 html_nodes.session
.
> getFromNamespace("html_nodes.session","rvest")
function (x, css, xpath)
{
html_nodes(xml2::read_html(x), css, xpath)
}
<environment: namespace:rvest>
我仍然更喜欢 read_html
的主要原因是我经常在一个页面上执行多个操作(读取一些节点,然后读取其他一些节点并编译所有信息)。使用 read_html
一次以执行多个 html_nodes 将在长 运行.
library(rvest)
url="https://cran.r-project.org/doc/manuals/r-release/R-lang.html"
sess=html_session(url )
no_read <- function(sess){
html_nodes(sess,"div")
html_nodes(sess,"p")
}
do_read <- function(sess) {
p <- read_html(sess)
html_nodes(p,"div")
html_nodes(p,"p")
}
library(microbenchmark)
microbenchmark(no_read(sess),do_read(sess))
Unit: milliseconds
expr min lq mean median uq max neval
no_read(sess) 41.42506 44.06154 55.05718 46.62327 66.03544 190.4596 100
do_read(sess) 28.71807 31.33751 42.38105 33.21593 47.32962 240.6938 100