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

