Rselenium-Как очистить данные с веб-страницы без идентификаторов или имен любого рода
В настоящее время я пытаюсь соскрести данные о биоразнообразии с конкретного веб-сайта (http://www.faunaeur.org/?no_redirect=1 мне удалось получить некоторые результаты, но не такие автоматизированные, как я надеялся...Сделана первая Часть , которая просматривает веб-сайт:
Настройка Rselenium:
library(RSelenium)
download.file("https://github.com/mozilla/geckodriver/releases/download/v0.11.1/geckodriver-v0.11.1-win64.zip",destfile="./gecko.zip")
unzip("./gecko.zip",exdir=".",overwrite=T)
checkForServer(update=T)
selfserv = startServer()
mybrowser1 = remoteDriver(browserName="firefox",extraCapabilities = list(marionette = TRUE))
mybrowser1$open()
Затем начинаю просмотр (это было бы примером для Балеарских островов):
mybrowser1$navigate("http://www.faunaeur.org/distribution.php?current_form=species_list")
mybrowser1$findElement(using="xpath","//select[@name='taxon_rank']/option[@value='7']")$clickElement() # Class
mybrowser1$findElement(using="xpath","//input[@name='taxon_name']")$sendKeysToElement(list('Oligochaeta')) # Oligochète
mybrowser1$findElement(using="xpath","//select[@name='region']/option[@value='15']")$clickElement()
mybrowser1$findElement(using="xpath","//input[@name='include_doubtful_presence']")$clickElement()
mybrowser1$findElement(using="xpath","//input[@name='submit2']")$clickElement()
С этого момента я могу скачать xls-файл 20 подвидов по использование:
mybrowser1$findElement(using = "xpath", "//a[@href='JavaScript:document.export_species_list.submit()']")$clickElement()
Но это не то, что я хочу, я не хочу использовать "щелчок". Можно ли загрузить файл из этой ссылки JavaScript непосредственно в моей среде R или очистить таблицу 20 подвидов непосредственно из исходного кода веб-страницы с помощью Rselenium ?
Я пробовал эти два решения, но это тупик...Самая большая проблема заключается в том, что страница является временной страницей или "страницей результатов", и кажется, что я не могу найти в ней никакого @value, @id, @name или @ class соответствует таблице, которая мне нужна.
Есть ли ключ к решению, которое подразумевает автоматизированный способ его выполнения через R ? Мне это нужно в такой форме, потому что сценарий должен быть запущен впоследствии людьми, которым нужно создать сами результаты. Заранее спасибо !
1 ответ:
Если вы просто хотите таблицу, которая отображается на веб-сайте, это можно сделать без Rselenium через
httr
следующим образом:require(rvest) require(httr) res <- POST("http://www.faunaeur.org/species_list.php", encode = "form", body = list(selected_regions="15", show_what="species list", referring_page="distribution", taxon_rank="7", taxon_name="Oligochaeta", region="15", include_doubtful_presence="yes", submit2="Display Species", show_what="species list", species_or_higher_taxa="species")) doc <- res %>% read_html dat <- doc %>% html_table(fill=TRUE, ) %>% .[[9]] colnames(dat) <- dat[1,] dat <- dat[-1, ]
Что дает вам:
Family Species / subspecies 2 Acanthodrilidae Microscolex dubius (Fletscher 1887) 3 Enchytraeidae Enchytraeus buchholzi Vejdovsky 1878 4 Enchytraeidae Fridericia berninii Dozsa-Farkas 1988 5 Enchytraeidae Fridericia caprensis Bell 1947 ... 21 Naididae Aulophorus furcatus (Oken 1815)