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

如何用R爬取Finanznachrichten多页新闻标题及发布时间?

解决方案

1. 抓取小时级发布时间

当前代码直接抓取表格会丢失小时级时间(页面原始HTML中,新闻的小时级时间存放在独立的节点里,表格渲染时可能只展示日期)。需要直接解析新闻条目标签,而非依赖html_table批量提取:

library(rvest)
library(dplyr)
library(polite)

# 初始化会话,设置合规的用户代理
col_link <- "https://www.finanznachrichten.de/nachrichten/nachrichten-alle.htm"
session <- bow(col_link, user_agent = "R crawler (your-email@example.com)")

# 定义单页数据抓取函数
scrape_single_page <- function(session) {
  page_content <- scrape(session)
  
  # 定位所有新闻条目行
  news_rows <- page_content %>% html_nodes("table tr:not(.tableheader)")
  
  # 提取标题与完整发布时间
  data.frame(
    title = news_rows %>% html_node(".newsheadline a") %>% html_text(trim = TRUE),
    publish_time = news_rows %>% html_node(".newstime") %>% html_text(trim = TRUE),
    stringsAsFactors = FALSE
  )
}

# 测试单页抓取效果
first_page_data <- scrape_single_page(session)
head(first_page_data)

.newstime节点就是存储小时级时间的元素,直接解析即可拿到类似10.10.2024 14:35的完整时间格式。

2. 处理多页抓取

该网站的分页链接格式为nachrichten-alle-[页码].htm(例如第二页URL为https://www.finanznachrichten.de/nachrichten/nachrichten-alle-2.htm),可以通过两种方式实现多页抓取:

方案A:构造分页URL循环抓取

# 定义要抓取的页码范围(1-5页)
target_pages <- 1:5

# 循环抓取所有页面数据
all_news_data <- lapply(target_pages, function(page_num) {
  # 构造对应页码的URL
  page_url <- if (page_num == 1) {
    col_link
  } else {
    gsub("\\.htm", paste0("-", page_num, ".htm"), col_link)
  }
  
  # 创建会话并抓取数据
  page_session <- bow(page_url, user_agent = "R crawler (your-email@example.com)")
  scrape_single_page(page_session)
}) %>% bind_rows()

# 查看总数据量与前几行结果
dim(all_news_data)
head(all_news_data)

方案B:从页面提取分页链接(更稳健)

如果网站分页规则可能变动,建议从页面底部的分页导航栏提取所有目标链接:

# 抓取第一页并提取所有分页链接
first_page <- scrape(session)
pagination_links <- first_page %>% 
  html_nodes(".pagination a") %>% 
  html_attr("href") %>% 
  paste0("https://www.finanznachrichten.de", .) %>% 
  unique()

# 补充第一页链接
all_page_links <- c(col_link, pagination_links)

# 循环抓取所有页面
all_news_data <- lapply(all_page_links, function(link) {
  page_session <- bow(link, user_agent = "R crawler (your-email@example.com)")
  scrape_single_page(page_session)
}) %>% bind_rows()

注意事项

  • 必须设置包含联系方式的user_agent,避免被网站判定为恶意爬虫封禁IP。
  • 在循环中添加Sys.sleep(1)控制请求间隔,遵守网站robots.txt规则。
  • 若遇到反爬拦截,可尝试用httr::add_headers添加Referer等请求头模拟浏览器行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 09:00:07