如何让html_attr("href")返回完整链接?并实现后续页面爬取
R语言处理相对链接转绝对路径+便捷爬取方法
一、把相对路径转成绝对链接
方法1:用
httr包的parse_url+build_url(更稳妥,自动处理复杂路径逻辑)
适合所有相对路径场景,比如带../的层级跳转路径也能正确拼接:library(httr) base_url <- "https://www.congress.gov" relative_path <- "/bound-congressional-record/1889/03/02/senate-section" # 解析基础URL并替换路径 parsed_base <- parse_url(base_url) parsed_base$path <- relative_path absolute_url <- build_url(parsed_base) # 输出结果:https://www.congress.gov/bound-congressional-record/1889/03/02/senate-section print(absolute_url)方法2:直接字符串拼接(适合开头带
/的简单相对路径)
操作简单,但如果相对路径不带前缀/,需要手动补充,通用性稍差:base_url <- "https://www.congress.gov" relative_path <- "/bound-congressional-record/1889/03/02/senate-section" absolute_url <- paste0(base_url, relative_path)
二、便捷打开链接爬取页面
静态页面用rvest+httr爬取
直接将生成的绝对链接传入read_html即可,底层会自动发起请求:
library(rvest) target_page <- read_html(absolute_url) # 后续可继续用rvest提取内容,示例: # target_page %>% html_nodes(".some-class") %>% html_text()
如果需要模拟浏览器请求头规避反爬,先通过httr::GET请求再解析:
response <- GET(absolute_url, 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" )) target_page <- read_html(response)
动态渲染页面用RSelenium爬取
如果页面需要加载JavaScript内容,用RSelenium驱动浏览器打开链接:
library(RSelenium) # 启动Chrome驱动(需提前配置好对应浏览器驱动) driver <- rsDriver(browser = "chrome") remDr <- driver$client # 跳转到目标绝对链接 remDr$navigate(absolute_url) # 获取页面源码并解析 page_source <- remDr$getPageSource()[[1]] target_page <- read_html(page_source) # 爬取完成后关闭驱动 remDr$close() driver$server$stop()
内容的提问来源于stack exchange,提问作者RYAN GUTH
相关产品推荐
相关产品推荐

