I still haven't seen a concrete reason/answer to this question and my dilemma is slightly different. So I am trying to scrape data from a website using a function which row binds it to data already found. The function calls info from another database which has 372 people in it. However, the function always stops at the 48th person no matter what I try and do. From the traceback, it seems that "Year" is the issue but I am not sure how to fix it.
Function:
event_scores <- function(first_name, last_name, id){
# get url
url <- paste0('https://thegymter.net/',first_name, '-', last_name, '/')
all_tables <- url %>%
read_html() %>%
html_nodes(xpath = paste0('//*[@id="post-', id, '"]/div/table')) %>%
html_table(fill = TRUE)
# get info table and event table for each athlete
event_table <- NULL
for (i in 2:length(all_tables)){
year_events <- url %>%
read_html() %>%
html_nodes(xpath = paste0('//*[@id="post-', id, '"]/div/p[', i+1, ']/strong')) %>%
html_text()
all_tables[[i]]$Year = substr(year_events,1,4) # add year of athlete
all_tables[[i]] <- all_tables[[i]][-1,]
event_table <- bind_rows(event_table, all_tables[[i]]) # building dataframe
}
# cleaning table
event_table$ID = id # add id of athlete
event_table[event_table == '——'] <- NA # remove -- in df
# column names
names(event_table)[names(event_table) == "X1"] <- "Date"
names(event_table)[names(event_table) == "X2"] <- "Competition"
names(event_table)[names(event_table) == ""] <- "Round"
names(event_table)[names(event_table) == "X4"] <- "VT"
names(event_table)[names(event_table) == "X5"] <- "UB"
names(event_table)[names(event_table) == "X6"] <- "BB"
names(event_table)[names(event_table) == "X7"] <- "FX"
names(event_table)[names(event_table) == "X8"] <- "AA"
return(event_table)
}
Code calling function:
scores_1 <- NULL
for (i in 1:nrow(dictionary_1)) {
y <- event_scores(dictionary_1[i,1], dictionary_1[i,2], dictionary_1[i,3])
scores_1 <- bind_rows(scores_1, y)
}
Traceback:
4. stop(sprintf(ngettext(N, "replacement has %d row, data has %d", "replacement has %d rows, data has %d"), N, nrows), domain = NA)
3. `$<-.data.frame`(`*tmp*`, "Year", value = character(0))
2. `$<-`(`*tmp*`, "Year", value = character(0))
1. event_scores(dictionary_1[i, 1], dictionary_1[i, 2], dictionary_1[i, 3])
Edited to include:
> dput(dictionary_1[45:50, ])
structure(list(first_n = structure(c(26L, 5L, 218L, 260L, 60L,
189L), .Label = c("abigail", "ahtziri", "aiko", "akari", "alaina",
"albena", "aleeza", "alessia", "alexa", "alexandra", "alia",
"aliaksandra", "alice", "aline", "alison", "alissa", "alisson",
"alizee", "amaranta", "amelie", "amy", "ana", "ana-luiza", "anapaula",
"anastasia", "anastasiya", "angel", "anna", "anne", "annie",
"antonia", "aoka", "arianna", "asia", "asuka", "audrey", "axelle",
"ayaka", "azumi", "bai", "becky", "bianca", "bianka", "boglarka",
"breanna", "brittany", "brooklyn", "cagla", "camilla", "camille",
"carina", "carlotta", "carolann", "carolyne", "casey", "caterina",
"catherine", "celia", "charlie", "charlotte", "chen", "chiaki",
"chiara", "chiharu", "chinami", "christina", "cindy", "claire",
"clara", "clarisse", "claudia", "coline", "csenge", "dalia",
"daniela", "daniele", "desiree", "dorien", "dorina", "dovelis",
"du", "elena", "eline", "elisa", "elisabeth", "elizabeth", "ellesse",
"ellie", "elsa", "emelie", "emily", "emma", "eniko", "enus",
"erika", "erin", "erja", "fan", "fien", "flavia", "francesca",
"frida", "gabby", "gaelle", "ganna", "georgia", "georgia-mae",
"georgia-rose", "georgina", "giada", "giorgia", "grace", "greta",
"guan", "haley", "halle", "hana", "hanna", "hannah", "helene",
"helody", "hitomi", "holly", "huang", "ilka", "imogen", "iosra",
"irene", "isabel", "isabela", "isabelle", "jade", "jasmin", "jelle",
"jennifer", "jessica", "jimena", "jolie", "jordyn", "julia",
"julie", "juliette", "jutta", "karla", "kate", "kelly", "kiara",
"kiko", "kim", "kirsten", "kitti", "kokoro", "kylie", "laney",
"lara", "larrissa", "latalia", "laura", "lauren", "laurie", "laurie-ann",
"laurie-lou", "lavinia", "lea", "lea-marie", "leah", "leanne",
"leticia", "li", "lilla", "lin", "lina", "lisa", "lisa-katharina",
"liu", "loan", "lorena", "lorette", "lorrane", "louise", "lu",
"luca", "lucy", "luo", "lyu", "madelaine", "madison", "maegan",
"maellyse", "mai", "maike", "maily", "maisie", "mana", "manon",
"mao", "marcia", "margaux", "marina", "marine", "mariya", "marlies",
"martina", "mary-adny", "mary-anne", "mathilde", "meaghan", "megan",
"melanie", "michela", "michelle", "micol", "mira", "miriana",
"mirtill", "nadja", "nagi", "natallia", "natsumi", "nicol", "nicole",
"nicolle", "nina", "noemi", "noemie", "nora", "olivia", "ondine",
"oreane", "ou", "pamela", "paulina", "pauline", "phoebe", "qi",
"quinn", "raer", "raya", "rebeca", "rebecca", "rianna", "romi",
"rose-kaying", "ruby", "rune", "sabrina", "sae", "sakura", "sara",
"sarah", "selina", "senna", "shallon", "shang", "shiho", "shoko",
"sofia", "sophie", "soyoka", "stacy", "stefanie", "stephanie",
"sydney", "tabea", "taeja", "talia", "tamara", "tan", "tang",
"tatiana", "tea", "teal", "thais", "thauany", "tunde", "urara",
"valentina", "valentine", "vanessa", "veronica", "victoria",
"victoria-kayen", "wakana", "wang", "wei", "wu", "xie", "xu",
"yao", "yesenia", "yin", "yoana", "youna", "yu", "yuki", "yumika",
"yumila", "yurika", "zhang", "zhao", "zhou", "zhu", "zoe", "zoja",
"zsofia"), class = "factor"), last_n = structure(c(111L, 156L,
343L, 21L, 24L, 34L), .Label = c("abdelaziz", "achampong", "akaho",
"akyol", "al-salty", "alicke", "alistratava", "allaire-bourgie",
"almeida", "alt", "andrade", "araujo", "ashikawa", "bacskay",
"bahl", "banishka", "barbosa", "basile", "beddoe", "berardinelli",
"bertrandt", "beullens", "bevan", "beydts", "birck", "black",
"boczogo", "bohmberger", "bonistalli", "bossu", "boumejmajen",
"bourgeois", "boyer", "brassart", "brevet", "briceno", "brown",
"bui", "busato", "campagnaro", "campana", "campos", "carofiglio",
"carvalho", "castro", "cenyu", "cereghetti", "chambellant", "chant",
"charpy", "chenchen", "chipizubov", "chrobok", "chujun", "chunsong",
"copiak", "cormoreche", "costa", "croket", "csasztvan", "csillag",
"cyrenne", "damato", "dandois", "daveloose", "de-jesus-dos-santos",
"de-jong", "demers", "denommee", "deriks", "derwael", "devai",
"devillard", "dickson", "diveky", "dowling", "downie", "dufournet",
"eade", "ecker", "enderle", "enghels", "esparza", "fasana", "feher",
"fellows", "fenton", "ferlito", "ferrari", "ferrera", "fidelis",
"folino", "follinger", "fragapane", "friess", "frysak", "fukasawa",
"gadirova", "garcia", "georgieva", "gill", "godwin", "griesser",
"grindle", "grisetti", "guerra", "gutierrez", "haase", "hammerle",
"hanawa", "harodnaya", "harrison", "harrold", "hatakeda", "heduit",
"hermans", "hernandez", "hill", "hilton", "hinsberger", "his",
"hockenhull", "hofele", "honti", "horvath", "huan", "huidan",
"hypolito", "imeraj", "inoue", "iorio", "ishikura", "jakubczyk",
"james", "jiaqi", "jiaxin", "jieyu", "jin", "jing", "jingxing",
"jinnan", "jinru", "jochum", "jones", "juk", "jupp", "kajita",
"kawasaki", "kickinger", "kinsella", "klinckaert", "kovacs",
"kroll", "kuhm", "kuwajima", "kwan", "lago", "laird", "lanza",
"lapp", "lastouskaya", "leat", "lechenault", "leliebre", "leolini",
"lepin", "letrange-mouakit", "levchuk", "leydin", "lima", "linari",
"linmin", "little", "louon", "lyons", "mader", "madsen", "maggio",
"makovits", "makra", "malewski", "mandriota", "mannersdorfer",
"mariani", "marois", "marongiu", "marques", "martin", "mata",
"matsumura", "mccolgan", "mcdonald", "meixner", "meneghini",
"merkle", "metelitsa", "methuen", "metzler", "meyers", "miller",
"minobe", "minotti", "mitchell", "miyakawa", "miyata", "mizzen",
"modaro", "monckton", "moors", "moreno", "morera", "morffi",
"morgan", "mori", "morz", "motten", "munteanu", "murakami", "mys",
"nakaji", "nakamura", "nedov", "netsiazhenka", "oates", "ogawa",
"oguchi", "oliveira", "olsen", "onyshko", "otaki", "padurariu",
"passeron", "paterson", "pedersen", "pedro", "peter", "peterman",
"petz", "philipp", "pikul", "planckeel", "pontlevoy", "praz",
"qi", "quaas", "ranchova", "rashkova", "redemagni", "regan",
"reis", "retiz", "ricciardi", "rizzelli", "roberts", "rocca",
"rocha", "rodriguez", "rogers", "romaeo", "rousseau", "ruckley",
"ruiyu", "ruoff", "ruttan", "sakaguchi", "sandoval", "saraiva",
"sasada", "saturnino", "savitskaya", "sayer", "schafer", "scheder",
"schermann", "schoniger", "schulze", "scott", "seitz", "serber",
"shijia", "shiting", "simm", "sinmon", "sisi", "siyi", "siyu",
"skrupa", "smantsar", "soares", "solari", "soloski", "spence",
"stabinger", "stacey", "stadelmann", "stanhope", "stingl", "sugihara",
"szekely", "szujo", "teramoto", "terlenghi", "theaker", "thomas",
"timm", "tingting", "tinkler", "torres", "townsend", "tratz",
"traukova", "tunney", "turner", "uchiyama", "ugrin", "vaelen",
"vandamme", "vandenhole", "vandersteen", "vanhille", "vansteenkiste",
"varabyova", "vargas", "verkest", "verschueren", "versonnen",
"vezina", "vidiaux", "villa", "vincenzi", "vivian", "voss", "waem",
"wahl", "whelan", "white", "whitehead", "wimmer", "woo", "xiaofang",
"xiaoyuan", "xijing", "yakubava", "yamada", "yan", "yankova",
"yawen", "yi", "yile", "yilin", "young", "yu", "yufei", "yufen",
"yumoto", "yushan", "zimmermann", "zlatkova"), class = "factor"),
ID = c(100752, 21406, 18657, 101150, 118387, 46357)), row.names = 45:50, class = "data.frame")