如何通过option值“all”使用R完成指定网页的表格数据抓取
R实现选All后抓取表格的两种可行思路
你可以根据自己的熟练度选择对应的方案,两种都可以稳定拿到全量数据:
方案1:直接构造请求(无需启动浏览器,运行效率更高)
这个方案不需要模拟浏览器操作,只要抓到选择all时页面发送的请求参数即可:
- 打开目标页面后按F12调出开发者工具,切换到「网络」标签,筛选
Fetch/XHR类型的请求 - 手动在页面下拉框选
all选项,观察新触发的请求参数,一般会有类似pageSize/rows/perPage这类控制展示条数的字段,对应的值就是all或者全站总数据条数 - 用R的
httr包构造带对应参数的请求,拿到返回内容后用rvest解析表格即可
示例代码框架:
library(httr) library(rvest) # 构造请求,query部分替换为你抓包拿到的实际参数 resp <- GET( "https://tools.canlearn.ca/cslgs-scpse/cln-cln/reea-mdl/reea-mdl-1-eng.do?nom-name=AB", query = list( # 示例:pageSize = "all",实际参数以你抓包结果为准 ) ) # 解析表格 table_data <- resp %>% read_html() %>% html_element(css = "table") %>% # 替换为页面表格对应的实际CSS选择器 html_table()
如果抓包发现是POST请求,把GET换成POST,参数放到body字段里即可。
方案2:RSelenium模拟操作(适合抓包不熟练的新手)
这个方案完全模拟人的操作逻辑,不需要研究请求参数:
- 提前安装
RSelenium包,以及和你本地浏览器版本匹配的驱动(Chrome用chromedriver,Edge用edgedriver) - 启动驱动后打开目标页面,定位到下拉框元素,选中
all选项 - 等待页面加载完成后提取页面源码,再用
rvest解析表格即可
示例代码框架:
library(RSelenium) library(rvest) # 启动Chrome驱动,chromever替换为你本地Chrome的实际版本号 driver <- rsDriver(browser = "chrome", chromever = "xxx.xxx.xx.x") remDr <- driver$client # 打开目标页面 remDr$navigate("https://tools.canlearn.ca/cslgs-scpse/cln-cln/reea-mdl/reea-mdl-1-eng.do?nom-name=AB") # 定位下拉框并选择all选项,css选择器替换为下拉框的实际值 dropdown <- remDr$findElement(using = "css", value = "select") dropdown$findElement(using = "xpath", value = "//option[@value='all']")$clickElement() # 等待页面加载完成 Sys.sleep(3) # 提取表格数据 page_source <- remDr$getPageSource()[[1]] table_data <- read_html(page_source) %>% html_element(css = "table") %>% html_table() # 用完关闭驱动释放资源 remDr$close() driver$server$stop()
内容的提问来源于stack exchange,提问作者Dax
相关产品推荐
相关产品推荐

