使用 rvest::read_html 时更改用户代理

Change user agent when using rvest::read_html

我可以使用 httr 包更改用户代理,并使用新的用户代理创建会话。但是,我不确定如何使用带有 read_html 函数的新用户代理来使用定义的用户代理获取 html 文档。

我已经看到错误报告 here,但不幸的是,我仍然不清楚在创建会话后如何让它工作,然后必须使用 read_html 函数。

作为编辑用户代理的示例,我有以下内容:

library(rvest)

link = "https://www.bbc.com/"

my_session = session(link)
my_session$response$request$options$useragent

user_agent_new = user_agent("Test User 1")

my_session2 = session(link, user_agent_new)
my_session2$response$request$options$useragent

如何在 rvest::read_html 调用中设置用户代理?

注意:rvestxml2 在后台使用 httr,因此我将在此处的回答中介绍 httr

如您在 post 中所述,使用 httr 包时动态设置用户代理非常简单。作为示例,我将使用上面列出的 link:

library(httr)

# Let's set user agent to a super common one
ua <- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"

# Query webpage
bbc <- GET("https://www.bbc.com/",
           user_agent(ua))

# Confirm it's actually used the desired user agent
bbc$request$options$useragent
#> [1] "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"

现在您可以在使用 httr 默认值时比较用户代理值:

library(httr)

# Query webpage with default user agent
bbc <- GET("https://www.bbc.com/")

# Print default user agent value
bbc$request$options$useragent
#> [1] "libcurl/7.64.1 r-curl/4.3 httr/1.4.2"

显然,您可以将用户代理设置为任何您想要的。这是 common User Agents.

的列表