Как почистить только содержимое сообщения в linkedin, содержащее идентификатор электронной почты в R? - PullRequest
0 голосов
/ 01 мая 2020

Я пытался почистить содержимое поста из linkedin на основе поиска по ключевым словам. С помощью сообщества stackoverflow я смог манипулировать URL и искать ключевые слова по ключевым словам с помощью моего R-скрипта. Но теперь, после прокрутки, скажем, 10 раз, я хочу очистить только те сообщения, которые содержат идентификатор электронной почты в теге привязки. Вот как 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
    }
  }

  }

Обратите внимание, что я дал идентификатор пользователя и передаю как "XXXX". Был бы признателен, если бы кто-нибудь помог мне с правильным запросом xpath.

1 Ответ

0 голосов
/ 01 мая 2020

Это должно выбрать нужные сообщения:

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

Чтобы получить текст каждого сообщения легко, я думаю, вы можете go с:

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

РЕДАКТИРОВАТЬ:

или

(//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 до общего количества сообщений, относящихся к вашему «условию электронной почты»)

...