gpt4 book ai didi

r - 使用 R : web site has two drop down menus 进行网页抓取

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

我想使用 R 从以下网站获取成绩数据的for循环函数:https://www7.nau.edu/pair/reports/ClassDistribution

为了获得表格数据,我必须首先选择年份,然后选择学术学校。我需要 2015-2019 年和大学内所有学校(ACC、ACM、...、WGS)的数据。当我选择年份和学校时,网址没有改变,这就是我没有得到表格数据的原因。我非常感谢您的帮助和建议。我能够创建 for 循环,我只需要看看如何拉第一个表。

我正在为静态网站使用以下代码:

library(XML)
library(RCurl)
url <- "https://www7.nau.edu/pair/reports/ClassDistribution"
url.parsed <- htmlParse(getURL(url), asText = TRUE)
tableNodes <- getNodeSet(url.parsed, '//*[@id="pp_table"]/table')
grade_data <- readHTMLTable(tableNodes[[1]], header=F, stringsAsFactors=F)

最佳答案

您正在处理一个简单的表格,您需要为每个学期和每个科目更新和提交该表格。 Selenium 很好,但我认为这里可能有点矫枉过正。 rvest::html_session擅长这种事情:

library(tidyverse)
library(rvest)

# Start session, extract semesters from form and filter.
session <- html_session("https://www7.nau.edu/pair/reports/ClassDistribution")
form <- html_form(session)[[1]]
semesters <- form$fields[[5]]$options[-1]
semesters <- semesters[grep("201[5-9]", names(semesters))]

# Update form with semester info, submit, and extract subjects.
form <- set_values(form, 'ctl00$MainContent$TermList' = semesters[1])
session <- submit_form(session, form, "<unnamed>")
form <- html_form(session)[[1]]
subjects <- form$fields[[6]]$options

# Update form with subject, submit, and extract data frame(s).
form <- set_values(form, 'ctl00$MainContent$SubjectList' = subjects[1])
session <- submit_form(session, form, "ctl00$MainContent$Button1")

df_list <- html_table(session, T, T, T)

有两点需要注意:
  • df_list返回您需要组合的数据框列表。我推荐dplyr::bind_rows() .
  • 您将需要两个循环:学期的外循环和每个学期内的科目的内循环。
  • 关于r - 使用 R : web site has two drop down menus 进行网页抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62102381/

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