在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
相关产品推荐
相关产品推荐

