如果在抓取时加载几次后 link 的 xpath 发生变化怎么办?

What to do if xpath for a link changes after loading for a few times while scraping?

我一直在尝试通过循环在搜索框中输入关键字后抓取 linkedin。搜索每个关键字时都会出现查看全部 link,它会给出相关的帖子。搜索 2-3 个关键字后,该锚标记的 xpath 发生变化,迫使循环中断并导致错误。

这是我正在尝试的代码:

library(RSelenium)
library(rvest)
library(stringr)
library(xml2)


try(rsDriver(port = 4444L, browser = 'firefox'))
remDr <- remoteDriver()
remDr$open()
remDr$navigate("https://www.linkedin.com/login")

det<-vector()
cat("Enter user id: ");
det[1] <- readLines("stdin",n=1);

user <- remDr$findElement(using = 'id',"username")
user$sendKeysToElement(list(det[1],key="tab"))

cat("Enter pass: ");
det[2] <- readLines("stdin",n=1);


pass <- remDr$findElement(using = 'id',"password")
pass$sendKeysToElement(list(det[2],key="enter"))

ex<-c("mba job","job referral","ca job","mba referral","high paying jobs")

for (b in 1:5) {
  Sys.sleep(10)
  search <- remDr$findElement(using = "xpath",'/html/body/header/div/form/div/div/div/div/div[1]/div/input')
  search$sendKeysToElement(list(ex[b],key="enter"))

 Sys.sleep(10)

  key <- remDr$findElement(using = "xpath",'/html/body/div[5]/div[3]/div[3]/div/div[2]/div/div[2]/div/div/div/div/ul/li[4]/div/div/a')
  key$clickElement()
}

还有更多关键字,为简单起见,给出了 5 个。key 变量保存了已更改的“查看所有”按钮的 xpath搜索时 'ca jobs'。接下来是我的代码来抓取帖子。

如何解决这个问题?

您应该使用更通用的东西来定位元素。对于搜索框:

//input[starts-with(@class,"search-global")]

要点击的元素 ("See All") :

//div[contains(@class,"escape-hatch")]

旁注:您可以遍历 url 而不是使用搜索框。使用 paste0,创建一个包含所有必需的 url 的列表:

urls = paste0("https://www.linkedin.com/search/results/all/?keywords=",vector containing your keywords)

然后使用循环或应用函数遍历该 lis(url[0],url[1],...) 并抓取您想要的内容。