在R中用rvest/RSelenium爬取链接:如何区分特定属性的<a>标签?
区分并爬取不同data-featured-tracking属性的链接(R语言)
嗨,这个问题其实很好解决,不管你用rvest还是RSelenium,核心都是通过精准匹配属性值来定位目标标签——毕竟这两个<a>标签唯一的差异就是data-featured-tracking的属性值嘛。下面给你具体的实现方法:
方法一:用rvest(推荐,轻量高效)
rvest支持CSS选择器和XPath,两种方式都能轻松定位到目标元素:
用CSS选择器(更简洁)
CSS选择器可以直接通过[属性名='属性值']的语法筛选元素,针对你的场景:
library(rvest) # 先读取目标页面(替换成你的网页URL或本地HTML内容) target_page <- read_html("https://your-target-url.com") # 爬取data-featured-tracking为"listing_no_promo"的链接 no_promo_links <- target_page %>% html_elements("a[data-featured-tracking='listing_no_promo']") %>% html_attr("href") # 提取href属性 # 爬取data-featured-tracking为"listing_promo"的链接 promo_links <- target_page %>% html_elements("a[data-featured-tracking='listing_promo']") %>% html_attr("href")
用XPath(兼容性更强)
如果你习惯用XPath,也可以通过属性匹配来定位:
# 爬取无promo的链接 no_promo_links_xpath <- target_page %>% html_elements(xpath = "//a[@data-featured-tracking='listing_no_promo']") %>% html_attr("href") # 爬取带promo的链接 promo_links_xpath <- target_page %>% html_elements(xpath = "//a[@data-featured-tracking='listing_promo']") %>% html_attr("href")
方法二:用RSelenium(动态页面场景)
如果你的目标页面是动态加载的(比如需要JS渲染),用RSelenium的话思路完全一致,只是调用方法稍有不同:
library(RSelenium) # 启动浏览器驱动(这里以Chrome为例) driver <- rsDriver(browser = "chrome") remDr <- driver[["client"]] # 访问目标页面 remDr$navigate("https://your-target-url.com") # 定位并提取无promo的链接 no_promo_elems <- remDr$findElements(using = "css selector", value = "a[data-featured-tracking='listing_no_promo']") no_promo_links_selenium <- sapply(no_promo_elems, function(x) x$getElementAttribute("href")) # 定位并提取带promo的链接 promo_elems <- remDr$findElements(using = "css selector", value = "a[data-featured-tracking='listing_promo']") promo_links_selenium <- sapply(promo_elems, function(x) x$getElementAttribute("href")) # 关闭驱动 remDr$close() driver$server$stop()
核心逻辑就是抓住两个标签唯一的差异化属性data-featured-tracking,用属性匹配的方式精准筛选,这样就能把两类链接分开爬取啦~
内容的提问来源于stack exchange,提问作者M_D
相关产品推荐
相关产品推荐

