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

paste0拼接URL后调用read_html报错,寻求更佳实现方案

使用read_html抓取数据时的URL拼接问题

问题描述

尝试用read_html抓取网页数据,需要传入URL。用paste0拼接URL字符串x时,错误添加了引号,导致x带有转义反斜杠。用print(x, quote=FALSE)能显示正确格式的URL,但把这个结果传入read_html链式调用时出现错误,直接传入正确格式的URL则可正常获取数据,寻求更好的解决方法。

代码示例:

> x<-paste0('"https://www.govtrack.us/congress/bills/', bills[15821,4],"/",bills[15821,1],'"')
> x
[1] "\"https://www.govtrack.us/congress/bills/118/HR8774\""
> print(x, quote = FALSE)
[1] "https://www.govtrack.us/congress/bills/118/HR8774"
> read_html(print(x, quote=FALSE)%>% html_nodes("#UserPositionModal+ p") %>% html_text())
[1] "https://www.govtrack.us/congress/bills/118/HR8774"
Error in UseMethod("xml_find_all") : 
  no applicable method for 'xml_find_all' applied to an object of class "character"
> read_html("https://www.govtrack.us/congress/bills/118/hr8774")%>% html_nodes("#UserPositionModal+ p") %>% html_text()
[1] "Making appropriations for the Department of Defense for the fiscal year ending September 30, 2025, and for other purposes."

解决方法

问题根源是拼接URL时多套了一层引号,完全没必要用print(x, quote=FALSE)来处理,直接在拼接时去掉多余引号就行:

# 正确拼接URL,不要加额外引号
x <- paste0("https://www.govtrack.us/congress/bills/", bills[15821,4], "/", bills[15821,1])

# 直接链式调用即可正常运行
read_html(x) %>% html_nodes("#UserPositionModal+ p") %>% html_text()

为什么之前的方法会报错?

print(x, quote=FALSE)只是在控制台显示不带引号的内容,但它根本没改变x本身的值——x还是那个带转义引号的字符串。把它传给read_html后,后续的html_nodes需要作用在网页解析后的xml_document对象上,而不是字符型变量,所以触发了错误。

如果已经生成了带引号的x,也可以这样修复

要是已经有了带引号的x,用字符串处理工具去掉首尾引号即可:

# 方法1:截掉首尾的引号
x_clean <- substr(x, 2, nchar(x)-1)

# 方法2:直接替换掉所有引号
x_clean <- gsub('"', '', x)

# 之后正常调用就没问题了
read_html(x_clean) %>% html_nodes("#UserPositionModal+ p") %>% html_text()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:07:11