求助:如何在R环境中下载网页无直接链接的Word文档?
解决R语言rvest无法获取欧盟税局Word文档下载链接的问题
问题原因
你定位的action_word_export按钮没有静态的href属性,点击它是通过前端JavaScript发起动态请求,由后端实时生成Word文档后触发浏览器下载,所以直接用rvest解析静态HTML拿不到下载链接。
解决方案1:用RSelenium模拟浏览器点击下载
RSelenium可以模拟真实浏览器的交互,触发按钮的JS事件完成下载:
library(RSelenium) # 启动Chrome浏览器(需提前配置好ChromeDriver环境) driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]] # 访问目标页面 url <- "https://ec.europa.eu/taxation_customs/tedb/taxDetails.html?id=4205/1672527600" remDr$navigate(url) # 定位并点击Word导出按钮 word_btn <- remDr$findElement(using = "id", value = "action_word_export") word_btn$clickElement() # 等待下载完成(根据实际网速调整等待时长) Sys.sleep(10) # 关闭浏览器与服务 remDr$close() driver$server$stop()
解决方案2:直接构造后端请求下载
通过浏览器开发者工具抓包可知,点击按钮后会向https://ec.europa.eu/taxation_customs/tedb/exportWord.htm发送POST请求,携带目标文档的ID参数,直接构造该请求即可下载:
library(httr) # 构造请求目标与参数 target_url <- "https://ec.europa.eu/taxation_customs/tedb/exportWord.htm" request_body <- list( id = "4205/1672527600" # 与页面URL中的id参数保持一致 ) # 发送POST请求并保存文件 response <- POST(target_url, body = request_body, encode = "form") writeBin(content(response, "raw"), "tax_detail.docx")
注意:如果遇到请求被拦截,可添加
add_headers(User-Agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")这类请求头模拟浏览器访问。
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

