R语言爬虫实战:如何爬取分页链接并批量保存

简介: R语言爬虫实战:如何爬取分页链接并批量保存
  1. 引言
    在数据采集和分析过程中,爬虫技术(Web Scraping)是一项非常重要的技能。R语言虽然以统计分析和数据可视化闻名,但其强大的网络爬虫能力同样不容忽视。本文将介绍如何使用R语言爬取分页网页的链接,并将数据批量保存到本地文件(如CSV或TXT),适用于新闻聚合、电商数据抓取、学术研究等场景。
  2. 准备工作
    在开始之前,确保已安装以下R包:
    ● rvest:用于HTML解析和数据提取
    ● httr:用于HTTP请求(处理GET/POST请求)
    ● dplyr:用于数据清洗和整理
    ● stringr:用于字符串处理
  3. 目标分析
    假设我们要爬取一个新闻网站(如示例网站 https://example-news.com),该网站的分页结构如下:
    ● 首页:https://example-news.com/page/1
    ● 第二页:https://example-news.com/page/2
    ● ...
    ● 第N页:https://example-news.com/page/N
    我们的任务是:
  4. 爬取所有分页的新闻标题和链接
  5. 存储到本地CSV文件
  6. 实现步骤
    4.1 获取单页链接
    首先,我们编写一个函数 scrape_page(),用于抓取单页的新闻标题和链接:
    library(rvest)
    library(httr)
    library(dplyr)
    library(stringr)

scrape_page <- function(page_url) {

发送HTTP请求

response <- GET(page_url, user_agent("Mozilla/5.0"))
if (status_code(response) != 200) {
stop("Failed to fetch the page")
}

解析HTML

html_content <- read_html(response)

提取新闻标题和链接(假设标题在

标签,链接在标签)

titles <- html_content %>%
html_nodes("h2 a") %>%
html_text(trim = TRUE)

links <- html_content %>%
html_nodes("h2 a") %>%
html_attr("href")

返回数据框

data.frame(Title = titles, URL = links, stringsAsFactors = FALSE)
}
4.2 爬取多页数据
由于网站是分页的,我们需要循环爬取多个页面。这里以爬取前5页为例:
base_url <- "https://example-news.com/page/"
max_pages <- 5

all_news <- data.frame()

for (page in 1:max_pages) {
page_url <- paste0(base_url, page)
cat("Scraping:", page_url, "\n")

tryCatch({
page_data <- scrape_page(page_url)
all_news <- bind_rows(all_news, page_data)
}, error = function(e) {
cat("Error scraping page", page, ":", e$message, "\n")
})

避免被封IP,设置延迟

Sys.sleep(2)
}

查看爬取的数据

head(all_news)
4.3 数据去重
由于某些网站可能在不同分页出现相同新闻,我们需要去重
all_news <- all_news %>%
distinct(URL, .keep_all = TRUE)
4.4 保存到CSV文件
最后,将数据保存到本地:
write.csv(all_news, "news_links.csv", row.names = FALSE)
cat("Data saved to 'news_links.csv'")

  1. 完整代码
    library(rvest)
    library(httr)
    library(dplyr)
    library(stringr)

代理配置

proxyHost <- "www.16yun.cn"
proxyPort <- "5445"
proxyUser <- "16QMSOML"
proxyPass <- "280651"

单页爬取函数(已添加代理)

scrape_page <- function(page_url) {

设置代理

proxy_config <- use_proxy(
url = proxyHost,
port = as.integer(proxyPort),
username = proxyUser,
password = proxyPass
)

发送HTTP请求(带代理)

response <- GET(
page_url,
user_agent("Mozilla/5.0"),
proxy_config
)

if (status_code(response) != 200) {
stop(paste("Failed to fetch the page. Status code:", status_code(response)))
}

解析HTML

html_content <- read_html(response)

提取新闻标题和链接(假设标题在

标签,链接在标签)

titles <- html_content %>%
html_nodes("h2 a") %>%
html_text(trim = TRUE)

links <- html_content %>%
html_nodes("h2 a") %>%
html_attr("href")

返回数据框

data.frame(Title = titles, URL = links, stringsAsFactors = FALSE)
}

爬取多页数据

base_url <- "https://example-news.com/page/"
max_pages <- 5

all_news <- data.frame()

for (page in 1:max_pages) {
page_url <- paste0(base_url, page)
cat("Scraping:", page_url, "\n")

tryCatch({
page_data <- scrape_page(page_url)
all_news <- bind_rows(all_news, page_data)
}, error = function(e) {
cat("Error scraping page", page, ":", e$message, "\n")
})

随机延迟1-3秒,避免被封

Sys.sleep(sample(1:3, 1))
}

数据去重

all_news <- all_news %>%
distinct(URL, .keep_all = TRUE)

保存到CSV文件

write.csv(all_news, "news_links.csv", row.names = FALSE)
cat("Data saved to 'news_links.csv'")

  1. 总结
    本文介绍了如何使用R语言爬取分页网站数据,并保存到本地CSV文件。关键步骤包括:
  2. 单页数据抓取(rvest + httr)
  3. 循环爬取多页(for/while 循环)
  4. 数据清洗与存储(dplyr + write.csv)
  5. 进阶优化(并行爬取、反爬虫策略)
目录
打赏
0
0
0
0
296
分享
相关文章
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
441 0
分布式爬虫框架Scrapy-Redis实战指南
基于aiohttp的高并发爬虫实战:从原理到代码的完整指南
在数据驱动时代,传统同步爬虫效率低下,而基于Python的aiohttp库可构建高并发异步爬虫。本文通过实战案例解析aiohttp的核心组件与优化策略,包括信号量控制、连接池复用、异常处理等,并探讨代理集成、分布式架构及反爬应对方案,助你打造高性能、稳定可靠的网络爬虫系统。
74 0
Python爬虫动态IP代理报错全解析:从问题定位到实战优化
本文详解爬虫代理设置常见报错场景及解决方案,涵盖IP失效、403封禁、性能瓶颈等问题,提供动态IP代理的12种核心处理方案及完整代码实现,助力提升爬虫系统稳定性。
79 0
Python多线程爬虫模板:从原理到实战的完整指南
多线程爬虫通过并发请求大幅提升数据采集效率,适用于大规模网页抓取。本文详解其原理与实现,涵盖任务队列、线程池、会话保持、异常处理、反爬对抗等核心技术,并提供可扩展的Python模板代码,助力高效稳定的数据采集实践。
69 0
爬虫IP代理效率优化:策略解析与实战案例
本文深入探讨了分布式爬虫中代理池效率优化的关键问题。首先分析了代理效率瓶颈的根源,包括不同类型代理的特点、连接耗时及IP失效问题。接着提出了六大核心优化策略:智能IP轮换矩阵、连接复用优化、动态指纹伪装、智能重试机制等,并结合电商价格监控、社交媒体舆情分析和金融数据抓取三个实战案例,展示了优化效果。同时建立了三维效率评估体系,从质量、成本和稳定性全面衡量性能。最后展望了AI驱动调度、边缘计算融合等未来演进方向,帮助爬虫系统实现从“暴力采集”到“智能获取”的进化,大幅提升效率并降低成本。
98 0
Kubernetes上的爬虫排队术——任务调度与弹性扩缩容实战
本教程介绍如何在 Kubernetes 上构建可扩展的爬虫系统,解决传统单机爬虫瓶颈。核心内容包括:使用 Docker 打包爬虫任务、RabbitMQ 实现任务队列、爬虫代理防限制、随机 User-Agent 模拟请求,以及通过 Horizontal Pod Autoscaler (HPA) 实现根据任务压力自动扩缩容。适合需要处理大规模网页采集的开发者学习与实践。
Kubernetes上的爬虫排队术——任务调度与弹性扩缩容实战
Python爬虫与代理IP:高效抓取数据的实战指南
在数据驱动的时代,网络爬虫是获取信息的重要工具。本文详解如何用Python结合代理IP抓取数据:从基础概念(爬虫原理与代理作用)到环境搭建(核心库与代理选择),再到实战步骤(单线程、多线程及Scrapy框架应用)。同时探讨反爬策略、数据处理与存储,并强调伦理与法律边界。最后分享性能优化技巧,助您高效抓取公开数据,实现技术与伦理的平衡。
163 4
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
376 6
Python爬虫——基于JWT的模拟登录爬取实战
Python爬虫——基于JWT的模拟登录爬取实战
202 1
Python爬虫——基于JWT的模拟登录爬取实战
Python爬虫实战:利用短效代理IP爬取京东母婴纸尿裤数据,多线程池并行处理方案详解
本文分享了一套结合青果网络短效代理IP和多线程池技术的电商数据爬取方案,针对京东母婴纸尿裤类目商品信息进行高效采集。通过动态代理IP规避访问限制,利用多线程提升抓取效率,同时确保数据采集的安全性和合法性。方案详细介绍了爬虫开发步骤、网页结构分析及代码实现,适用于大规模电商数据采集场景。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问