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

如何通过rvest和purrr抓取ICObench中ICO链接的详情数据?

嘿,看来你已经迈出了爬取ICObench数据的第一步,拿到了91页的ICO名称链接,接下来要抓取每个链接背后的详情数据其实挺清晰的!我来给你一步步拆解解决方案:

第一步:先完善ICO链接的提取(确保拿到完整URL)

首先,你之前的代码应该已经能提取ICO名称,但别忘了同时抓取每个名称对应的href属性——这是详情页的相对路径,我们需要把它拼接成完整的URL才能访问详情页。这里给你补全这部分的代码:

library(rvest)
library(purrr)
library(dplyr)

# 补全你的基础分页URL(你原来的url_base有截断,这里用完整的格式)
url_base <- "https://icobench.com/icos?page=%d&filterBonus=&filterBounty=&filterTeam=&filterExpert=&filterSort=&filterCategory=all&filterRating=any&filterStatus=ended"

# 生成1到91页的完整URL列表
page_urls <- sprintf(url_base, 1:91)

# 爬取每一页的ICO名称和对应的详情页完整链接
ico_links <- map_dfr(page_urls, function(page_url) {
  # 读取单页HTML
  page <- read_html(page_url)
  
  # 提取名称+相对链接,再拼接成完整URL
  tibble(
    ico_name = page %>% html_elements(".ico-name a") %>% html_text(),
    ico_full_url = page %>% html_elements(".ico-name a") %>% html_attr("href") %>% paste0("https://icobench.com", .)
  )
})
第二步:编写单个详情页的爬取函数

接下来,我们需要一个函数来处理单个详情页的数据提取——把你需要的字段(比如评分、众筹金额、团队信息等)都定义好。这里给你一个示例函数,你可以根据自己的需求调整提取的字段:

# 定义抓取单个ICO详情页数据的函数
scrape_ico_details <- function(ico_url) {
  # 加入随机延迟(1-3秒),避免触发网站反爬机制
  Sys.sleep(runif(1, 1, 3))
  
  # 用tryCatch捕获错误,防止单个页面爬取失败导致整个程序中断
  tryCatch({
    page <- read_html(ico_url)
    
    # 提取你需要的字段,示例字段包括名称、评分、分类、众筹金额、团队规模
    tibble(
      url = ico_url,
      ico_name = page %>% html_element(".profile-name h1") %>% html_text(),
      rating = page %>% html_element(".rating .value") %>% html_text() %>% as.numeric(),
      category = page %>% html_element(".category a") %>% html_text(),
      total_raised = page %>% html_element(".money .raised") %>% html_text(),
      team_size = page %>% html_element(".team .number") %>% html_text() %>% as.integer()
    )
  }, error = function(e) {
    # 如果页面爬取失败,返回NA值的行,保证数据完整性
    tibble(
      url = ico_url,
      ico_name = NA_character_,
      rating = NA_real_,
      category = NA_character_,
      total_raised = NA_character_,
      team_size = NA_integer_
    )
  })
}
第三步:批量遍历所有链接抓取数据

有了上面的函数,我们就可以用purrr的map_dfr来批量处理所有ICO链接,把结果自动合并成一个数据框:

# 遍历所有ICO详情页链接,抓取数据
ico_full_data <- map_dfr(ico_links$ico_full_url, scrape_ico_details)

# 如果需要,可以把原始的名称数据和详情数据合并(避免重复)
final_dataset <- left_join(ico_links, ico_full_data, by = c("ico_full_url" = "url", "ico_name" = "ico_name"))
一些关键注意事项
  • 反爬机制:一定要加随机延迟,不要快速连续请求,否则很容易被网站封禁IP。也可以设置自定义的User-Agent来模拟浏览器请求。
  • 字段调整:上面的示例字段只是参考,你可以打开ICObench的详情页,用浏览器的开发者工具(F12)查看你需要的元素选择器,替换到函数里。
  • 错误处理:tryCatch非常重要,能避免某个页面加载失败导致整个爬取任务中断,保证最终数据的完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:08:58