gpt4 book ai didi

rvest,如何在 html_nodes 中使用 NA 值来创建数据表

转载 作者:行者123 更新时间:2023-12-02 00:59:53 25 4
gpt4 key购买 nike

所以我想做一个网站上一些信息的数据表。这是我到目前为止所做的。

library(rvest)
url <- 'https://uws-community.symplicity.com/index.php?s=student_group'
page <- html_session(url)

name_nodes <- html_nodes(page,".grpl-name a")
name_text <- html_text(name_nodes)

df <- data.frame(matrix(unlist(name_text)), stringsAsFactors = FALSE)

library(tidyverse)
df <- df %>% mutate(id = row_number())

desc_nodes <- html_nodes(page, ".grpl-purpose")
desc_text <- html_text(desc_nodes)

df <- left_join(df, data.frame(matrix(unlist(desc_text)),
stringsAsFactors = FALSE) %>%
mutate(id = row_number()))

email_nodes <- html_nodes(page, ".grpl-contact a")

email_text <- html_text(email_nodes)
df <- left_join(df, data.frame(matrix(unlist(email_text)),
stringsAsFactors = FALSE) %>%
mutate(id = row_number()))

这一直有效,直到我到达电子邮件部分。一些条目没有电子邮件。在数据框中,最后三行显示的是 NA 值,而不是适当的行显示电子邮件的 NA 值。

如何才能使适当的行显示具有 NA 值,而不仅仅是最后 3 行?

最佳答案

解决这个问题的关键是找到每个学生组已知存在的 20 个父节点。有了这个父节点列表,在每个父节点上使用 html_node 函数。 html_node 函数将返回一个结果或 NA,具体取决于所需标记是否存在。我会推荐这种技术,只要有可变数量的子节点。

library(rvest)
library(dplyr)
url <- 'https://uws-community.symplicity.com/index.php?s=student_group'
page <- html_session(url)

#find group names
name_text <- html_nodes(page,".grpl-name a") %>% html_text()
df <- data.frame(name_text, stringsAsFactors = FALSE)
df <- df %>% mutate(id = row_number())

#find text description
desc_text <- html_nodes(page, ".grpl-purpose") %>% html_text()
df$desc_text <- trimws(desc_text)

#find emails
# find the parent nodes with html_nodes
# then find the contact information from each parent using html_node
email_nodes<-html_nodes(page, "div.grpl-grp") %>% html_node( ".grpl-contact a") %>% html_text()
df$emails<-email_nodes

我还借此机会简化了您的代码,因为列表都是 20 个元素长,因此 unlist/matrix/mutate 函数没有理由将额外的列添加到数据框中。

关于rvest,如何在 html_nodes 中使用 NA 值来创建数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51336519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com