Изтрийте html таблица от дълъг списък с url адреси и направете един списък с кадри с данни

Имам списък от 38 000+ URL адреса. Всеки url има таблица, която бих искал да изтрия. Например:

library(rvest)
library(magrittr)
library(plyr)


#Doing URLs one by one
url<-"http://www.acpafl.org/ParcelResults.asp?Parcel=00024-006-000"

##GET SALES DATA
pricesdata <- read_html(url) %>% html_nodes(xpath = "//table[4]") %>% html_table(fill=TRUE)
library(plyr)
df <- ldply(pricesdata, data.frame)

Бих искал да обобщя това за всички URL адреси в Parcels_ID.txt.

#(1) Step one is to generate a list of urls that we want to scrape data from

parcels <- read.csv(file="Parcels_ID.txt", sep="\t", header=TRUE, stringsAsFactors=FALSE) #import the data
parcelIDs <- as.vector(parcels$PARCELID) #reformat the column as a vector containing parcel IDs as individual elements of the vector
parcels$url = paste("http://www.acpafl.org/ParcelResults.asp?Parcel=", parcelIDs, sep="") #paste the web address and the parcel ID together to get the link to the parcel on the website

Сега, след като го имам, бих искал да напиша цикъл, който минава през всеки url и изтегля таблицата, след което поставя резултатите в списък с кадри с данни. Тук имам проблем:

#(2) Step to is to write a for loop that will scrape the tables from the individual pages

compiled<-list()
for (i in seq_along(parcels$url)){

  ##GET SALES DATA
  pricesdata <- read_html(parcels$url[i]) %>% html_nodes(xpath = "//table[4]") %>% html_table(fill=TRUE)

  compiled[[i]] <- ldply(pricesdata, data.frame)

}

Този код никога не завършва. Ще оценя всички орлови очи, които могат да забележат грешки или проблеми, или всякакви предложения относно най-добрите практики за писане на този for цикъл, който прави рамка с данни от таблиците, извлечени от уебсайтовете.

Благодаря ти


person user3795577    schedule 04.12.2015    source източник
comment
Изчислихте ли колко време отнема обработката на 1 страница и след това умножихте това по 38 000? Ако всяка страница отнема секунда, бихте очаквали да чакате над 10 часа.   -  person MrFlick    schedule 04.12.2015
comment
@MrFlick Вярно... Мислите ли, че има начин да се ускори това?   -  person user3795577    schedule 04.12.2015
comment
(a) Бих помолил собственика на сайта за изхвърляне на съдържание, за да бъде добър към тяхната инфраструктура. има голям шанс да се генерира от база данни и може да ви спести много главоболия (б) ако не искате да ги уведомите, че изтривате съдържанието им, като поискате различен формат, тогава можете ли да стартирате GNU Parallel? Ако е така, можете да направите нещо като stackoverflow.com/questions/8634109/ и след това обработете файловете на диска.   -  person hrbrmstr    schedule 05.12.2015
comment
току-що отидох на този примерен URL адрес. това определено е извикване на база данни на живо и извършването на масово изтриване без таймаут/закъснение би било наистина ужасно от ваша страна. Изглежда, че е IIS сайт със заден край на SQL Server и от външния вид те са малка организация, така че това вероятно е доста малък сървър. Моля, имайте предвид това, когато се опитвате да извършите непреднамерена атака за отказ на услуга срещу тях.   -  person hrbrmstr    schedule 05.12.2015
comment
@hrbrmstr Наистина оценявам съвета. Това показва, че малко знание може да бъде вредно. Не възнамерявам да навредя, така че е добре да знам за последиците. Можете ли да обясните по-подробно какво е непреднамерена атака за отказ на услуга?   -  person user3795577    schedule 05.12.2015
comment
@hrbrmstr Бихте ли предоставили малко повече подробности относно използването на GNU parallel за това заедно с тази връзка? Никога не съм го използвал преди.   -  person user3795577    schedule 05.12.2015