如何优化R语言rvest爬虫代码提取生存物品列表?
问题解决方案
一、优化Wyatt Black页面的爬虫代码(解决漏提首件物品、空值问题)
核心问题大概率是CSS选择器匹配范围不全,或未过滤空节点导致,可按以下步骤调整:
- 加载依赖并获取页面
library(rvest) library(stringr) # 获取目标页面内容 url <- "https://www.history.com/shows/alone/cast/wyatt-black" page <- read_html(url)
- 精准匹配节点并过滤无效内容
通过浏览器开发者工具(F12)确认物品所在的HTML结构(比如物品可能在带特定类的<li>或<div>中),调整选择器确保覆盖首个元素,同时清理空值:
# 替换为实际匹配所有物品的选择器(示例:假设物品在class为"gear-item"的li标签内) items <- page %>% html_elements(".gear-item") %>% html_text2() %>% # 智能处理HTML中的换行、空白 str_squish() %>% # 去除多余空格、换行 Filter(function(x) x != "", .) # 过滤空字符串
- 构建指定行数的数据框
取前10个有效物品(若不足10则按实际数量),转为数据框:
top_10_items <- head(items, 10) df_wyatt <- data.frame(Item = top_10_items, row.names = NULL)
二、处理无编号列表形式的Brooke & Dave Whipple页面
针对无序列表(<ul>)结构的内容,只需调整选择器匹配<ul>下的<li>元素,步骤如下:
- 获取页面并提取无序列表项
url_bd <- "https://www.history.com/shows/alone/cast/brooke-and-dave-whipple" page_bd <- read_html(url_bd) # 匹配目标无序列表的所有列表项(需确认目标ul的类/id,避免匹配无关列表) bd_items <- page_bd %>% html_elements("ul.gear-list li") %>% # 替换为实际目标ul的选择器 html_text2() %>% str_squish() %>% Filter(function(x) x != "", .)
- 构建数据框
top_10_bd <- head(bd_items, 10) df_bd <- data.frame(Item = top_10_bd, row.names = NULL)
关键注意事项
- 必须通过浏览器开发者工具查看目标页面的真实HTML结构,调整选择器至精准匹配目标物品节点,这是解决爬取遗漏问题的核心。
html_text2()相比html_text()能更好处理HTML中的格式空白,减少无效内容的产生。
内容的提问来源于stack exchange,提问作者bill999
相关产品推荐
相关产品推荐

