gpt4 book ai didi

r - 在抓取html页面之前是否需要在rvest中使用read_html?

转载 作者:行者123 更新时间:2023-12-05 01:25:31 26 4
gpt4 key购买 nike

我正在使用 rvest 来抓取网页。
我以前用url打开 session ,直接调用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 作为第一个参数只是调用 html_nodesread_html(url) , 如你看到的。您的第一个调用使用 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

关于r - 在抓取html页面之前是否需要在rvest中使用read_html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34001457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com