如何从单个网页抓取全部表格?求获取第二个站点下方表格方法
解决R语言抓取网页多表格的问题
嘿,这个问题其实是对readHTMLTable()返回值的理解小误区,我来一步步帮你搞定!
问题根源
readHTMLTable()函数抓取网页后,返回的是一个列表对象——网页里的每个表格对应列表里的一个元素。你之前直接用data.frame()转换的话,只会把列表的第一个元素(也就是第一个表格)转成数据框,自然就漏掉了第二个表格。
解决方案
方法1:直接提取指定表格
先把所有表格存为列表,再按需提取:
library(tidyverse) library(XML) # 获取第二个站点的所有表格(返回列表,每个元素是一个表格) all_flows_tables <- "http://cdec.water.ca.gov/reportapp/javareports?name=FNF" %>% readHTMLTable() # 提取第一个表格(和你之前的flows_part1一致) flows_part1 <- all_flows_tables[[1]] %>% data.frame() # 提取第二个表格(你需要的flows_part2) flows_part2 <- all_flows_tables[[2]] %>% data.frame()
方法2:批量处理所有表格(更优雅)
如果需要同时处理多个表格,用purrr的map_dfr可以把所有表格合并成一个带标识的数据框,方便后续分析:
# 将所有表格转成数据框,并添加"table_number"列标记来源表格 flows_all_combined <- all_flows_tables %>% map_dfr(data.frame, .id = "table_number")
方法3:直接指定抓取目标表格
如果你提前知道要抓第几个表格,可以用readHTMLTable()的which参数直接定位,省去列表提取的步骤:
# 直接抓取第二个表格 flows_part2 <- "http://cdec.water.ca.gov/reportapp/javareports?name=FNF" %>% readHTMLTable(which = 2) %>% data.frame()
小技巧
可以先运行str(all_flows_tables)或者length(all_flows_tables)查看列表的结构和表格数量,确保你提取的是正确的表格~
内容的提问来源于stack exchange,提问作者dbo
相关产品推荐
相关产品推荐

