You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R网页抓取:无法从目标网站获取规范表格格式CSV文件

解决R抓取Franchise Direct全球百强特许经营商表格的问题

嘿,我来帮你搞定这个网页抓取的麻烦!你现在没法从那个全球百强特许经营商页面导出规范的CSV,看了你的代码后,问题主要出在节点选择太混乱,把不同列的内容都堆到同一列里了,完全没对应上每行的结构。咱们一步步来修正:

原代码的核心问题

  • 你把Rank、Name、Industry、Country这些不同列的节点都塞进了同一个Rank数据框列,导致数据完全无序,没有行与列的对应关系
  • 没有先定位表格的行结构,直接抓取零散的单元格,自然没法生成规范的表格

修正后的完整代码

我调整了节点选择逻辑,先抓表格的每一行,再从每行里精准提取对应列的内容,最后合并分页数据并导出CSV:

# 加载所需包
library(rvest)
library(dplyr)

# 定义分页URL模板
url_base <- "https://www.franchisedirect.com/top100globalfranchises/rankings?page=%d"

# 循环处理1到5页的数据
full_data <- bind_rows(lapply(1:5, function(page_num) {
  # 读取页面
  page <- read_html(sprintf(url_base, page_num))
  
  # 定位表格的每一行(跳过表头行)
  table_rows <- page %>% html_nodes(".top500listingTable tr") %>% .[-1]
  
  # 从每行提取各列内容
  row_data <- lapply(table_rows, function(row) {
    tibble(
      Rank = row %>% html_node(".top500listingTableRank") %>% html_text(trim = TRUE),
      Franchise_Name = row %>% html_node(".top500listingTableName") %>% html_text(trim = TRUE),
      Industry = row %>% html_node(".top500listingTableIndustry") %>% html_text(trim = TRUE),
      Country = row %>% html_node(".top500listingTableCountry") %>% html_text(trim = TRUE)
      # 如果还有其他需要的列,比如Year/Rank_Change,可按同样方式添加
    )
  })
  
  # 绑定当前页面的所有行数据,同时加延迟避免反爬
  bind_rows(row_data) %>% 
    {Sys.sleep(1); .}
}))

# 导出为规范的CSV文件
write.csv(full_data, "global_top100_franchises.csv", row.names = FALSE)

关键说明

  1. 精准节点选择:用table_rows <- page %>% html_nodes(".top500listingTable tr") %>% .[-1]定位表格的每一行,.[-1]是跳过第一行的表头
  2. 列对应提取:对每一行单独提取Rank、Franchise_Name等列,确保每行的内容一一对应
  3. 反爬防护:加入Sys.sleep(1)让程序在每页抓取后停顿1秒,避免被网站判定为爬虫而封禁IP
  4. 数据清洗:用html_text(trim = TRUE)去除文本前后的空格和换行符,让数据更整洁

如果后续页面结构有变化,你可以用浏览器的开发者工具(F12)重新查看元素的class名称,调整对应的html_node参数就行。

内容的提问来源于stack exchange,提问作者FaRz1 Ezpz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:39:11