gpt4 book ai didi

r - 使用 purrr :map to loop through web pages for scraping with Rselenium

转载 作者:行者123 更新时间:2023-12-05 02:45:13 25 4
gpt4 key购买 nike

我有一个基本的 R 脚本,我使用 Rselenium 拼凑而成,它允许我登录网站,一旦验证我的脚本,然后转到感兴趣的第一页并从页面中提取 3 段文本。

对我来说幸运的是,URL 的创建方式使我可以将数字向量传递给 URL 以将我带到感兴趣的下一页,因此使用了 map()。

虽然在每个页面上我都想从页面上抓取相同的 3 个元素并将它们存储在主数据框中以供以后分析。

我希望使用 map 函数系列,以便我可以更加熟悉它们,但我真的很难让它们正常工作,谁能告诉我哪里出错了?

这是我代码的主要部分(转到网站并登录)

library(RSelenium)
# https://stackoverflow.com/questions/55201226/session-not-created-this-version-of-chromedriver-only-supports-chrome-version-7/56173984
rd <- rsDriver(browser = "chrome",
chromever = "88.0.4324.27",
port = netstat::free_port())

remdr <- rd[["client"]]

# url of the site's login page
url <- "https://www.myWebsite.com/"

# Navigating to the page
remdr$navigate(url)

# Wait 5 secs for the page to load
Sys.sleep(5)

# Find the initial login button to bring up the username and password fields
loginbutton <- remdr$findElement(using = 'css selector','.plain')

# Click the initial login button to bring up the username and password fields
loginbutton$clickElement()

# Find the username box
username <- remdr$findElement(using = 'css selector','#username')

# Find the password box
password <- remdr$findElement(using = 'css selector','#password')

# Find the final login button
login <- remdr$findElement(using = 'css selector','#btnLoginSubmit1')

# Input the username
username$sendKeysToElement(list("myUsername"))

# Input the password
password$sendKeysToElement(list("myPassword"))

# Click login
login$clickElement()

嘿,我们来了!

现在我的代码将我带到感兴趣的初始页面(索引 = 1)

上面我提到我希望通过每个页面递增,我可以通过在 rcId 元素的 URL 中替换一个整数来做到这一点,见下文

#remdr$navigate("https://myWebsite.com/rc_redesign/#/layout/jcard/drugCard?accountId=XXXXXX&rcId=1&searchType=R&reimbCode=&searchTerm=&searchTexts=*") # 导航到页面

对于 1:9999 中的每个 rcId,我希望获取以下 3 个元素并将它们存储在数据框中

hcpcs_info <- remdr$findElement(using = 'class','is-jcard-heading')

hcpcs <- hcpcs_info$getElementText()[[1]]

hcpcs_description <- remdr$findElement(using = 'class','is-jcard-desc')

hcpcs_desc <- hcpcs_description$getElementText()[[1]]

tc_info <- remdr$findElement(using = 'css selector','.col-12.ng-star-inserted')

therapeutic_class <- tc_info$getElementText()[[1]]

我试过创建一个单独的函数并传递给 map 但我还不够先进,无法将它们拼凑在一起,下面是我尝试过的方法。

my_function <- function(index) {
remdr$navigate(sprintf("https://rc2.reimbursementcodes.com/rc_redesign/#/layout/jcard/drugCard?accountId=113479&rcId=%d&searchType=R&reimbCode=*&searchTerm=*&searchTexts=*",index)
Sys.sleep(5)
hcpcs_info[index] <- remdr$findElement(using = 'class','is-jcard-heading')
hcpcs[index] <- hcpcs_info$getElementText()[index][[1]])
}

x <- 1:10 %>%
map(~ my_function(.x))

任何帮助将不胜感激

最佳答案

尝试以下操作:

library(RSelenium)

purrr::map_df(1:10, ~{
remdr$navigate(sprintf("https://rc2.reimbursementcodes.com/rc_redesign/#/layout/jcard/drugCard?accountId=113479&rcId=%d&searchType=R&reimbCode=*&searchTerm=*&searchTexts=*",.x))
Sys.sleep(5)
hcpcs_info <- remdr$findElement(using = 'class','is-jcard-heading')
hcpcs <- hcpcs_info$getElementText()[[1]]
hcpcs_description <- remdr$findElement(using = 'class','is-jcard-desc')
hcpcs_desc <- hcpcs_description$getElementText()[[1]]
tc_info <- remdr$findElement(using = 'css selector','.col-12.ng-star-inserted')
therapeutic_class <- tc_info$getElementText()[[1]]
tibble(hcpcs, hcpcs_desc, therapeutic_class)
}) -> result
result

关于r - 使用 purrr :map to loop through web pages for scraping with Rselenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66056336/

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