Я бы сделал это по-другому: я бы создал функцию, скажем, «скребок», которая объединит все функции очистки, которые вы уже определили, и поэтому я создам список со str_c всех возможных ссылок (скажем 30), после этого простая функция lapply.Как все сказано, я не буду использовать Rselenium.(библиотеки: rvest, stringr, tibble, dplyr)
url = 'https://www.sreality.cz/hledani/prodej/byty?strana='
здесь это база URL, начиная с которой вы сможете реплицировать строки URL для всех страниц (от 1 до той, на которой вы находитесь)интересует (и для всех возможных URL-адресов, для praha, olomuc, ostrava и т. д.).
main_page = read_html('https://www.sreality.cz/hledani/prodej/byty?strana=')
здесь вы создаете все ссылки в соответствии с количеством страниц, которые вы хотите:
list.of.pages = str_c(url, 1:30)
, а затем определяете одну функцию для всех интересующих вас данных, таким образомВы более точны, и ваша отладка ошибок легче, а также качество данных.(Я предполагаю, что ваш выбор CSS правильный, в противном случае вы получите пустой объект)
для имен
name = function(url) {
data = html_nodes(url, css=".name.ng-binding") %>%
html_text()
return(data)
}
для населенного пункта
locality = function(url) {
data = html_nodes(url, css=".locality.ng-binding") %>%
html_text()
return(data)
}
для нормальных значений
normprice = function(url) {
data = html_nodes(url, css=".norm-price.ng-binding") %>%
html_text()
return(data)
}
для hrefs
sreality_url = function(url) {
data = html_nodes(url, css=".title") %>%
html_attr("href")
return(data)
}
это единственные функции (выбор CSS, даже если я их не проверял, кажется мне не правильным, но это даст вам правильную основу дляработа над).После этого объедините их в tibble obj
get.data.table = function(html){
name = name(html)
locality = locality(html)
normprice = normprice(html)
hrefs = sreality_url(html)
combine = tibble(adtext = name,
loc = locality,
price = normprice,
URL = sreality_url)
combine %>%
select(adtext, loc, price, URL) return(combine)
}
, затем последний скребок:
scrape.all = function(urls){
list.of.pages %>%
lapply(get.data.table) %>%
bind_rows() %>%
write.csv(file = 'MyData.csv')
}