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

在R中读取网页HTML代码时遇到错误的技术求助

解决Box Office Mojo网页爬取的读取异常问题

嘿,咱们来排查下你爬取Box Office Mojo页面时遇到的报错问题。看了你的代码和示例链接,主要有几个常见原因,咱们逐个解决:

1. URL没加协议头(最可能的元凶)

你构造的URL是www.boxofficemojo.com/movies/?id=avatar.htm,浏览器能正常访问是因为自动补全了https://,但read_html可没这么智能,必须明确加上完整的协议头才行。

修改URL构造代码:

url <- paste0("https://www.boxofficemojo.com", movies_table[1,1])

2. 网站反爬机制拦截了请求

Box Office Mojo会检查请求的User-Agent,如果用rvest默认的请求头,很容易被识别成爬虫而拦截。咱们可以模拟浏览器的请求头来绕过这个限制:

library(rvest)
library(httr)

# 模拟Chrome浏览器的请求头
session <- html_session(url, httr::user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"))
webpage <- read_html(session)

3. CSS选择器可能失效了

你用的.mp_box_content b这个选择器,说不定因为Box Office Mojo的页面结构更新而失效了。建议你打开目标页面,按F12调出开发者工具,重新确认票房数据对应的元素选择器。比如现在网站的票房数据可能在其他类名的容器里,得重新定位。

完整修正后的示例代码

library(rvest)
library(httr)

# 构造带协议头的完整URL
base_url <- "https://www.boxofficemojo.com"
movie_path <- "/movies/?id=avatar.htm" # 对应你movies_table里的路径
url <- paste0(base_url, movie_path)

# 模拟浏览器请求,避免反爬拦截
session <- html_session(url, user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"))
webpage <- read_html(session)

# 这里的选择器需要根据实际页面调整(示例用了当前页面的票房容器选择器)
gross_data_html <- html_nodes(webpage, ".a-section.a-spacing-none.mojo-performance-summary-table .a-span12")
# 提取文本内容
gross_data <- html_text(gross_data_html)
print(gross_data)

最后提醒下:不要频繁发送请求,最好每次请求后加个Sys.sleep(2)之类的延迟,避免触发网站的反爬限制哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:30:41