Веб-слом в R, используя для цикла - PullRequest
0 голосов
/ 20 февраля 2019

Я хотел бы почистить данные из этой ссылки , и я написал следующий код на R для этого.Это, однако, не работает и возвращает только первую страницу результатов.Судя по всему, цикл не работает.Кто-нибудь знает, что не так с циклом?

library('rvest')

for (i in 1:40) {

     webpage <- read_html(paste0(("http://search.beaconforfreedom.org/search/censored_publications/result.html?author=&cauthor=&title=&country=7327&language=&censored_year=&censortype=&published_year=&censorreason=&sort=t&page=, i"))

     rank_data_html <- html_nodes(webpage,'tr+ tr td:nth-child(1)')

     rank_data <- html_text(rank_data_html)

     rank_data<-as.numeric(rank_data)

     title_data_html <- html_nodes(webpage,'.censo_list font')

     title_data <- html_text(title_data_html)

     author_data_html <- html_nodes(webpage,'.censo_list+ td font')
     author_data <- html_text(author_data_html)

     country_data_html <- html_nodes(webpage,'.censo_list~ td:nth-child(4) font')

     rcountry_data <- html_text(country_data_html)

     year_data_html <- html_nodes(webpage,'tr+ tr td:nth-child(5) font')

     year_data <- html_text(year_data_html)

     type_data_html <- html_nodes(webpage,'tr+ tr td:nth-child(6) font')

     type_data <- html_text(type_data_html)

}

censorship_df<-data.frame(Rank = rank_data, Title = title_data, Author = author_data, Country = rcountry_data, Type = type_data, Year = year_data)

write.table(censorship_df, file="sample.csv",sep=",",row.names=F)

1 Ответ

0 голосов
/ 20 февраля 2019

Вы уверены, что с петлей что-то не так?Я ожидал бы, что это получит первую страницу результатов 40 раз.Посмотрите на

webpage <- read_html(paste0(("http://search.beaconforfreedom.org/search/censored_publications/result.html?author=&cauthor=&title=&country=7327&language=&censored_year=&censortype=&published_year=&censorreason=&sort=t&page=, i"))

Разве это не должно быть (разница в последних десяти символах строки; кавычка движется)

webpage <- read_html(paste0(("http://search.beaconforfreedom.org/search/censored_publications/result.html?author=&cauthor=&title=&country=7327&language=&censored_year=&censortype=&published_year=&censorreason=&sort=t&page=", i))

Что paste0 делает в R, так этосшивает две строки без разделителя.Но у вас есть только одна строка.Таким образом, он пытается получить результаты для page=, i.Но вы хотите, чтобы он получал от page=1 до page=40.Поэтому поставьте кавычку, например page=", i, чтобы она вставляла URL и i вместе.

Я не программист на R, но это просто бросается в глаза.

Источник для paste0 поведения.

...