R语言如何从rvest获取的li节点xml_nodeset中提取href链接
直接从links1节点集提取URL的实现方法
不需要重复发起HTTP请求、重复解析页面,直接用rvest配套的节点操作函数,基于你已经生成的links1对象就能完成提取:
- 核心逻辑是先从每个li节点中匹配所有嵌套的
<a>标签,再直接提取这些a标签的href属性值即可,全程复用第一次read_html得到的解析结果,无额外网络开销。
这个方法提取到的链接范围和需求完全匹配:只会取li节点下的a标签链接,不会混入页面中li标签外的其他a链接,比全页面扫描所有a标签的结果更精准。
对应的实现代码如下,直接替换你之前用GET+XML重复解析的那段逻辑就行:
# 从已有的li节点集中提取所有嵌套a标签的href属性 links_direct <- links1 %>% html_nodes("a") %>% html_attr("href")
可选优化操作
- 如果只需要提取li节点下直接子级的a标签、不需要抓更深层级嵌套的a节点,可以把节点筛选部分换成XPath精准匹配:
html_nodes(xpath = "./a") - 提取完成后可以按需清洗结果:过滤掉
href="#"这类占位无效链接,用xml2::url_absolute()把相对路径链接转为带域名的完整绝对链接,参考代码:
# 替换成你实际爬取的站点根地址 base_domain <- "https://mywebsite.com" # 过滤无效链接+转绝对路径 links_clean <- links_direct[!links_direct %in% c("#", "")] links_clean <- xml2::url_absolute(links_clean, base_domain)
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

