使用rvest抓取带onclick属性的政府采购供应商公司名问题
嘿,我看了你遇到的问题——用rvest提取政府采购网站里带onclick事件的公司名称标签内容没成功,对吧?结合你给的HTML结构和代码,我给你两个可行的解决思路:
解决方法:提取带有onclick事件的a标签文本
情况1:页面内容是JavaScript动态渲染的
你遇到的很可能是动态加载的问题:read_html()只能抓取页面的静态源码,而这个带onclick的a标签内容可能是页面加载后通过JS动态插入的,静态源码里根本没有。这种情况得用浏览器自动化工具模拟真实访问:
library(RSelenium) library(rvest) # 启动Chrome浏览器(需提前安装ChromeDriver并配置好环境) driver <- rsDriver(browser = "chrome", port = 4567L) remote_driver <- driver[["client"]] # 访问目标页面 remote_driver$navigate("https://comunidad.comprasdominicana.gob.do//Public/Tendering/OpportunityDetail/Index?noticeUID=DO1.NTC.700904") # 获取加载完成后的页面源码 page_source <- remote_driver$getPageSource()[[1]] page <- read_html(page_source) # 提取公司名称,同时清理多余空格 company_names <- page %>% html_nodes(".BusinessCardCompanyName") %>% html_text(trim = TRUE) print(company_names) # 用完记得关闭浏览器和服务 remote_driver$close() driver$server$stop()
情况2:内容是静态存在的,优化选择器即可
如果静态源码里其实有这个内容,只是你的抓取方式有小问题,可以试试更精确的选择器,同时处理文本的多余空格:
library(rvest) library(dplyr) url <- "https://comunidad.comprasdominicana.gob.do//Public/Tendering/OpportunityDetail/Index?noticeUID=DO1.NTC.700904" page <- read_html(url) # 用更精确的层级选择器定位目标a标签 company_names <- page %>% html_nodes("td.BusinessCardContentCell a.BusinessCardCompanyName") %>% html_text(trim = TRUE) print(company_names)
小技巧:先排查静态源码
你可以先手动验证一下:打开目标页面后,按Ctrl+U查看页面的静态源代码(不是F12的元素审查),搜索BusinessCardCompanyName关键词。如果能找到对应的公司名称文本,就用情况2的方法;如果找不到,那肯定是动态加载的,必须用情况1的浏览器自动化方案。
内容的提问来源于stack exchange,提问作者Johan Rosa
相关产品推荐
相关产品推荐

