我在论坛上收集所有帖子标题时遇到问题。
library(rvest)
library(xml2)
url_page <-c("http://medyczka.pl/forum-gastrologiczne/")
all_titles <- matrix()
#Function
for (i in 1:5) {
web <-read_html(paste0(url_page,i))
post_title <- web %>% html_nodes(css='.title') %>%
html_text() %>%
as.character()
all_titles <- rbind(all_titles, post_title)
}
#Show me collected titles
str(all_titles)
head(all_titles)
#str(all_titles)
#chr [1:6, 1] NA "Ból po operacji szczeliny odbytu" "Hemoroidy?" ...
#- attr(*, "dimnames")=List of 2
#..$ : chr [1:6] "" "post_title" "post_title" "post_title" ...
#..$ : NULL
我应该有100行。但是,看起来该函数仅收集每1-5页的第一篇文章的标题。 我写错了什么?
答案 0 :(得分:2)
不确定您的编码有误,但是我会做不同的事情。
首先,在给定基本URL和页码的情况下,编写一个函数以返回标题:
(已编辑)
get_titles <- function(base_url, page) {
read_html(paste0(base_url, page)) %>%
html_nodes(".title") %>%
html_text()
}
现在使用purrr::map2_df
通过以下功能创建数据框:
library(tidyverse)
library(rvest)
titles <- map2_df("http://medyczka.pl/forum-gastrologiczne/",
1:5,
~tibble(titles = get_titles(.x, .y)))
titles
现在是一个带有标题的1 x 100数据框。
glimpse(titles)
Observations: 100
Variables: 1
$ titles <chr> "Ból po operacji szczeliny odbytu",
"Biegunko podobne coś po kawie, nabial, ostrym jedzeniu",
"reg...
答案 1 :(得分:1)
您正在尝试将向量束缚到一个空矩阵中,R在知道您的意图时遇到了问题。最好以更清晰的方式定义目标的形状。在这里,我将all_titles定义为数据框架,并在绑定之前将post_title定义为数据框架。
url_page <-c("http://medyczka.pl/forum-gastrologiczne/")
all_titles <- data.frame()
#Function
for (i in 1:5) {
web <-read_html(paste0(url_page,i))
post_title <- web %>% html_nodes(css='.title') %>%
html_text()
all_titles <- rbind(all_titles, data.frame(post_title))
}
我还没有测试过,但是应该可以。在循环中使用rbind并不是很有效,但是由于循环只有5个周期和100个元素,因此对性能的影响很小。
提醒您,请阅读本网站上的用户协议并遵守任何限制。