如何在R中只刮取linkedin中包含email id的帖子内容?

问题描述 投票:0回答:1

我一直在尝试从linkedin中基于关键字搜索来刮取帖子内容。在stackoverflow社区的帮助下,我可以用R脚本操作URL和搜索linkedin的关键词。但是现在,在滚动了10次之后,我想只抓取那些在锚标签中包含电子邮件ID的帖子。这就是如果帖子中有锚标签,html在linkedin中的显示方式。

enter image description here

我无法确定如何编写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")

user <- remDr$findElement(using = 'id',"username")
user$sendKeysToElement(list("xxxx",key="tab"))

pass <- remDr$findElement(using = 'id',"password")
pass$sendKeysToElement(list("xxxx",key="enter"))

ex<-c("jobs in delhi","jobs in mumbai","jobs in bangalore","how to get a job in india")
for(b in 1:4){
  urls[b] = paste0("https://www.linkedin.com/search/results/content/?keywords=",ex[b],"&origin=CLUSTER_EXPANSION")
}

j<-1
a1<-vector()
final<-vector()
for (b in 1:4) {


  remDr$navigate(urls[b])

  for(i in 1:10){
    remDr$executeScript(paste("scroll(0,",i*10000,");"))
    Sys.sleep(5)    
  }
  page_source<-remDr$getPageSource()

  a1 <- xml2::read_html(page_source[[1]]) %>% try(html_nodes(xpath="//a[contains(text(), '@')]/parent::span/parent::div[@class, 'feed-shared-text__text-view feed-shared-text-view white-space-pre-wrap break-words ember-view']"))%>% html_text()
  p1 <- length(a1)

  if(p1!=0){
    for(k in 1:p1){
      final[j]<-a1[k]
      j<-j+1
    }
  }

  }

请注意,我已经给了用户id和pass为 "XXXX"。如果有人能帮我用正确的xpath查询,我将感激不尽。

r selenium-webdriver xpath web-scraping rvest
1个回答
0
投票

这应该选择你想要的帖子。

//div[@class='feed-shared-text__text-view feed-shared-text-view white-space-pre-wrap break-words ember-view'][.//a[contains(.,"@")]]

为了方便地得到每篇文章的文本,我想你可以用:

string((//div[@class='feed-shared-text__text-view feed-shared-text-view white-space-pre-wrap break-words ember-view'][.//a[contains(.,"@")]])[1])

EDIT :

(//div[@class="feed-shared-update-v2__description-wrapper ember-view"][.//a[contains(.,"@")]])[1]//text()[normalize-space()]

其中[1]是要递增的值(从1到你得到的总帖子数)。

要提取单页显示的帖子的文本。

string(//div[@class="feed-shared-update-v2__description-wrapper ember-view"][.//a[contains(.,"@")]])

编辑2。 要提取在搜索结果页上显示的帖子的文本。

(//div[@class="feed-shared-update-v2__description-wrapper ember-view"][.//a[contains(.,"@")]])[i]/div[1]//text()[normalize-space()]

string((//div[@class="feed-shared-update-v2__description-wrapper ember-view"][.//a[contains(.,"@")]])[i]/div[1])

其中[i]是要递增的值(从1到符合您的 "电子邮件条件 "的帖子总数)。

© www.soinside.com 2019 - 2024. All rights reserved.