[英]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
的元素上循環, .x
或x
是單個元素(來自匿名函數 - 即動態創建的function(x)
或~
- in tidyverse
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.