Заполните веб-форму, отправьте и загрузите результаты - PullRequest
4 голосов
/ 30 сентября 2019

Я хочу заполнить веб-форму , отправить запрос и загрузить полученные данные. В некоторых полях есть возможность выпадающего меню или ввода поискового запроса, разделы также можно оставить пустыми (если все разделы оставлены пустыми, загружается вся база данных), нажатие кнопки «поиск и загрузка» должно вызватьзагрузка файла.

Вот что я пробовал (выбирая все записи для вида "Salmo salar") на основании этого вопроса. Я использовал свой браузер (Opera) «Инструменты разработчика» для проверки элементов страницы и определения имен всех возможных полей:

library(httr)

url <- "https://nzffdms.niwa.co.nz/search"

fd <- list(
  search_catchment_no_name = "",
  search_river_lake = "",
  search_sampling_locality = "",
  search_fishing_method = "",
  search_start_year = "",
  search_end_year = "",
  search_species  = "Salmo salar", # species of interest
  search_download_format = 1,      # select csv file format
  submit = "Search and Download"
)

POST(url, body = fd, encode = "form")

Я надеялся, что это приведет к загрузке файла CSV (все записи длявида "Salmo salar"), но нет файлов для загрузки (но выводит это (список из 10, просто показывая первый бит):

Response [https://nzffdms.niwa.co.nz/search]
Date: 2019-10-02 23:35
Status: 200
Content-Type: text/html; charset=utf-8
Size: 19.1 kB
<!DOCTYPE html>  
  <html>  
  <head>  
  <meta http-equiv="Content-Type" content="text/html; c...
    <meta name="title" content="NZ Freshwater Fish Database...
<meta name="description" content="NIWA NZ Freshwater Fish...
<meta name="keywords" content="NIWA, NZ, Freshwater Fish" />
<meta name="language" content="en" />
<meta name="robots" content="index, follow />

...

Edit

Я думаю, что проблема в том, какЯ вызываю кнопку Search and download, при проверке веб-страницы большинство полей выглядят так:

# end year field
<input maxlength="4" class="form-control" type="text" name="search[end_year]" id="search_end_year">

Но элементы кнопки search and download не имеют опции name или id:

<input type="submit" value="Search and Download" class="btn btn-primary btn-md">

Также я только что заметил, что есть скрытое поле, может быть, мне нужно это определить?

<input type="hidden" name="search[_csrf_token]" value="d1530f09c1ce8110b5163bd100cb0d67" id="search__csrf_token">

Любой совет, как я могу получить загрузку файла, будет оченьоценили.

1 Ответ

3 голосов
/ 03 октября 2019

Сначала проверьте robots.txt на сайте . Он закомментирован по состоянию на 3 октября 2019 года.

Затем прочитайте условия на https://nzffdms.niwa.co.nz/terms и https://www.niwa.co.nz/freshwater-and-estuaries/nzffd/user-guide/tips и убедитесь, что вы соблюдаете условия.

И важно также отрегулировать запрос, приведенный ниже.

После проверки всех условий вы можете использовать приведенный ниже код для запроса ваших данных:

library(httr)
library(xml2)

gr <- GET("https://nzffdms.niwa.co.nz/search")
doc <- read_html(content(gr, "text"))     #doc <- read_html(gr) #this works as well
getTbl <- function(x) {
    do.call(rbind, lapply(xml_find_all(doc, paste0(".//select[@name='search",x,"']/option")),
        function(n) data.frame(NAME=xml_text(n), VALUE=xml_attr(n, "value"))))
}
fishing_method <- getTbl("[fishing_method]")
species <- getTbl("[species][]")
csrf_token <- xml_attr(xml_find_all(doc, ".//input[@name='search[_csrf_token]']"), "value")

fd <- list(
    "search[catchment_no_name]"="",
    "search[river_lake]"="",
    "search[sampling_locality]"="",
    "search[fishing_method]"="",
    "search[species][]"="",
    "search[species][]"=68,
    "search[start_year]"="",
    "search[end_year]"="",
    "search[download_format]"="1",
    "search[_csrf_token]"=csrf_token
)
r <- POST("https://nzffdms.niwa.co.nz/doSearch", body=fd, encode="form")
read.csv(text=content(r, "text", encoding="UTF-8"))

вывод:

   card m    y catchname  catch        locality time  org map    east   north altitude penet fishmeth effort pass spcode abund number minl maxl  nzreach
1  3964 1 1981   Waiau R 797.49       Lake Gunn   NA niwa d41 2122400 5581200      477   225      ang     NA   NA salsal    NA     NA   NA   NA 15006671
2  3965 1 1981   Waiau R 797.49     Lake Fergus   NA niwa d41 2123700 5584400      483   229      ang     NA   NA salsal    NA     NA   NA   NA 15006092
3 15975 1 2003   Waiau R 797.40 Excelsior Creek 1330 niwa d44 2095800 5495800      190    94      efp     80    1 salsal    NA      2  102  105 15030686
4 50772 1 1940   Waiau R 797.49 Upukerora River   NA  unk d43 2098500 5519900      210   146      unk     NA   NA salsal    NA     NA   NA   NA 15020897
...