概述
在网页爬取过程中,选择合适的数据存储结构至关重要。R 语言中有两种常用的数据存储结构:传统数据框(data.frame)和现代的 tibble(来自 tibble
包)。两者在性能、灵活性和兼容性方面各有优劣。
同时,百度搜索作为中国最受欢迎的搜索引擎,其关键词排名数据可以精准反映用户的搜索意图和当前的网络热点。这些关键词排名数据在舆情监控、市场调研、用户需求分析等领域中具有重要价值。例如,通过采集百度搜索前十排名的链接,可以快速了解热门话题或特定关键词的受欢迎程度,从而为决策提供数据支持。
本文将探讨传统数据框与 tibble 的差异,并通过从百度搜索获取排名前十的关键词链接为例,分析两者在网页爬取数据存储中的表现。
数据框与 tibble 的对比
属性 | 传统数据框 | tibble |
---|---|---|
性能 | 操作速度较慢,特别是大规模数据处理时表现较差。 | 优化性能,适合大数据集的存储与处理。 |
灵活性 | 不支持嵌套列表或复杂结构,列名需遵循规则。 | 支持复杂结构,如嵌套列表,列名可以包含特殊字符。 |
易用性 | 在控制台打印时输出所有数据,易导致信息过载。 | 更友好的打印方式,仅显示前几行,提高可读性。 |
兼容性 | 与 R 的基础函数完全兼容。 | 与 tidyverse 套件完美集成,但可能需要额外学习成本。 |
实现代码:采集百度搜索前十关键词
以下代码展示了如何结合代理 IP 和多线程技术,从百度搜索中爬取排名前十的关键词链接,并将数据存储为 tibble。
library(httr)
library(rvest)
library(tibble)
library(future)
library(furrr)
# 配置爬虫代理参数 亿牛云爬虫代理加强版 www.16yun.cn
proxy_ip <- "proxy.16yun.cn" # 替换为亿牛云提供的IP
proxy_port <- 12345 # 替换为亿牛云提供的端口
proxy_user <- "用户名" # 替换为亿牛云用户名
proxy_pass <- "密码" # 替换为亿牛云密码
# 自定义函数:从百度搜索获取前十排名链接
fetch_baidu_links <- function(keyword) {
# 构建百度搜索 URL
url <- paste0("https://www.baidu.com/s?wd=", URLencode(keyword))
# 配置请求头信息
headers <- add_headers(
"User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.1 Safari/537.36",
"Cookie" = "your_cookie_here"
)
# 配置爬虫代理信息
proxy <- use_proxy(
url = paste0("http://", proxy_ip, ":", proxy_port),
username = proxy_user,
password = proxy_pass
)
# 发送请求
response <- GET(url, headers, proxy)
# 检查响应状态并解析 HTML
if (status_code(response) == 200) {
page <- read_html(content(response, "text", encoding = "UTF-8"))
# 提取搜索结果链接
links <- page %>%
html_nodes(".t a") %>% # 根据百度搜索的HTML结构定位
html_attr("href") %>%
head(10) # 获取前10个链接
return(links)
} else {
warning("Failed to fetch search results for keyword: ", keyword)
return(NULL)
}
}
# 目标关键词列表
keywords <- c("R语言爬虫", "数据分析工具", "Python与R比较")
# 使用多线程技术并行爬取关键词排名
plan(multisession) # 设置多线程计划
results <- future_map(keywords, fetch_baidu_links)
# 转换为 tibble
data <- tibble(
keyword = keywords,
top_links = results
)
# 输出结果
print(data)
# 保存结果为 CSV
write.csv(data, "baidu_top_links.csv", row.names = FALSE)
总结
百度搜索的关键词排名数据能帮助开发者快速捕捉网络热点并获得用户行为洞察。在网页爬取数据存储方面,传统数据框和 tibble 各具优势:
- 小型项目:传统数据框更适合简单的、无需复杂存储结构的任务。
- 大型项目:对于包含嵌套数据或需要处理大规模数据集的爬取任务,tibble 是更优的选择。
通过结合代理 IP 和多线程技术,以上代码提供了一种高效采集百度搜索排名数据的解决方案,并展示了 tibble 的灵活性和性能优势。