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

使用rvest解析HTML时遭遇read_xml.raw错误求助

使用rvest解析Markit页面时出现"Failed to parse text"错误的解决思路

问题场景

尝试用rvest解析链接 https://mer.markit.com/br-reg/public/project.jsp?project_id=104000000028782,执行代码:

library(rvest)

link <- "https://mer.markit.com/br-reg/public/project.jsp?project_id=104000000028782"
page <- link %>% read_html()

出现错误:

Error in read_xml.raw(raw, encoding = encoding, base_url = base_url, as_html = as_html, :
Failed to parse text

错误原因分析

这个错误通常由以下情况导致:

  • 服务器返回内容非标准HTML/XML格式(如乱码、空白内容)
  • 请求被服务器反爬机制拦截(未模拟浏览器请求特征)
  • 页面需登录或验证才能访问,直接请求返回非目标内容

解决步骤

1. 排查请求响应状态与内容

用httr包先获取请求响应,确认服务器返回的实际内容:

library(httr)
library(rvest)

link <- "https://mer.markit.com/br-reg/public/project.jsp?project_id=104000000028782"
# 发送请求
resp <- GET(link)
# 查看响应状态码(200表示请求成功)
print(status_code(resp))
# 查看返回内容的前500字符,判断是否为目标HTML
cat(substr(content(resp, as = "text"), 1, 500))

2. 模拟浏览器请求头

若状态码非200,或返回拦截页面,添加User-Agent模拟浏览器:

resp <- GET(link, 
            add_headers(`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"))
# 尝试解析页面
page <- read_html(resp)

3. 指定编码格式

若返回内容存在编码问题,手动指定编码:

page <- read_html(resp, encoding = "UTF-8")

4. 处理需验证的页面

若返回登录/验证页面,说明站点需要会话验证,此时rvest直接爬取无法完成,可使用RSelenium模拟浏览器完成登录后再解析页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:22:09