簡體   English   中英

你如何從 R 中的列表中對數據進行子集化?

[英]How do you subset data from a list in R?

我想從最后一行代碼生成的所有 16 個頁面中提取工作描述,也就是“p”標記 HTML 元素。

“ret”是由最后一行代碼生成的 16 個 HTML 頁面的列表。 我不習慣使用列表列表,所以我很困惑如何從這些列表中提取數據。

通常我會使用

res %>%
html_elements("body p")

但我收到錯誤消息,“使用方法錯誤(“xml_find_all”):沒有適用於“xml_find_all”的方法應用於“列表”類的對象

library(tidyverse)
library(rvest)
library(xml2)

url<-"https://www.indeed.com/jobs?q=data%20analyst&l=San%20Francisco%2C%20CA&vjk=0c2a6008b4969776"
page<-xml2::read_html(url)#function will read in the code from the webpage and break it down into different elements (<div>, <span>, <p>, etc.

#get job title
title<-page %>%
  html_nodes(".jobTitle") %>%
  html_text()
  
#get company Location
loc<-page %>%
  html_nodes(".companyLocation") %>%
  html_text()

#job snippet
page %>%
  html_nodes(".job-snippet") %>%
  html_text()

#Get link 
desc<- page %>%
  html_nodes("a[data-jk]") %>%
  html_attr("href") 

# Create combine link 
combined_link <- paste("https://www.indeed.com", desc, sep="")

#Turn combined link into a session follow link



page1 <-  html_session(combined_link[[1]])
page1 %>%
  html_nodes(".iCIMS_JobContent, #jobDescriptionText") %>%
  html_text()

#one<- page %>% html_elements("a[id*='job']")

#create function return a list of page-returns

ret <- lapply(paste0("https://www.indeed.com", desc), read_html)

  

我們可以使用來自base R lapply

out <- lapply(ret, function(x) x %>%
         html_nodes(".iCIMS_JobContent, #jobDescriptionText") %>% 
          html_text())

或使用來自purrr map循環

library(purrr)
out <- map(ret, ~ .x %>% 
         html_nodes(".iCIMS_JobContent, #jobDescriptionText") %>% 
         html_text())

注意:兩者都在list的元素上循環, .xx是單個元素(來自匿名函數 - 即動態創建的function(x)~ - in tidyverse

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM