html_form из rvest не распознает форму

Я пытаюсь очистить содержимое этого веб-сайта с помощью rvest (< strong> не связанных статей / рефератов, а только количество, название, авторов и т. д.).

По умолчанию на странице отображаются только документы 2016 года, и очистить данные за 2016 год не было проблемой. Я надеялся, что URL-адрес изменится после изменения «2016» на «все годы», но он остался прежним. Я обратился к html_form. Изучив «ресурсы» веб-страницы, я обнаружил, что соответствующее имя входа - filteryear.

R-код:

library(rvest)
rdc <- html_session("https://sfb649.wiwi.hu-berlin.de/fedc/discussionPapers_formular_content.php")
form <- html_form(rdc)
form <- set_values(form, filteryear = "all years")
#Error: Unknown field names: filteryear

Очевидно, filteryear не является частью формы. С ограниченными знаниями HTML, которые у меня есть, я почти уверен, что нижеследующее говорит мне, что форма состоит из трех входов: filterTypeName, filterName и filteryear.

HTML из ресурса:

<form action='discussionPapers_formular_content.php' method='post'>
  <select name='filterTypeName'>
    <option value='AUTHORS'>Author</option>
    <option value='PROJECT'>Project Code</option>
    ...
    <option value='JEL'>JEL</option
  </select> </td>                            # Is this </td> the problem?!
  <td valign='baseline'> 
    <input type='text' size='35' name='filterName' >
  </td> 
  <td valign='baseline'>
    <select name='filteryear'>
       <option value='2005'>2005</option>
       ...
       <option value='2016'>2016</option>
       <option value='all'>all years</option>
    </select>
  </td>                                    
  <td valign='baseline'>
     &nbsp;&nbsp;<INPUT type='submit' value='Search' name='B1'></INPUT>
  </td></tr>                                   
</form>

Почему html_form не распознает эту форму полностью? И, что более важно, есть ли способ решить эту проблему?


person KenHBS    schedule 21.11.2016    source источник


Ответы (1)


Я рассчитываю привести html_form в работу, но вы можете просто httr::POST заполнить форму вручную следующим образом:

library(rvest)
library(httr)
res <- POST("https://sfb649.wiwi.hu-berlin.de/fedc/discussionPapers_formular_content.php",
     body = list(filterTypeName = "filterTypeName:AUTHORS",
                 filteryear = "all",
                 B1 = "Search"), encode = "form")
out <- read_html(res) %>% html_table(fill=TRUE)

Думаю, вам нужна седьмая таблица:

> dim(out[[7]])
[1] 805  10

> head(out[[7]])

        X1                                                                                     X2
1 2016-049                                                                              Q3-D3-LSA
2 2016-048                                     Unraveling of Cooperation in Dynamic Collaboration
3 2016-047                                                            Time Varying Quantile Lasso
4 2016-046                                                           Credit Rating Score Analysis
5 2016-045                                          Information Acquisition and Liquidity Dry-Ups
6 2016-044 Dynamic Contracting with Long-Term Consequences: Optimal CEO Compensation and Turnover
                                                                  X3  X4         X5                       X6
1                               Lukas Borke and   Wolfgang K. Härdle  B1 15.11.2016        C87,   C88,   G17
2                                                        Suvi Vasama  A8 07.11.2016        C73,   D83,   O31
3      Lenka Zbonakova,  Wolfgang Karl H\177ardle and   Weining Wang  B1 07.11.2016 C21,   G01,   G20,   G32
4 Wolfgang Karl H\177ärdle,  Phoon Kok Fai and   David Lee Kuo Chuen  B1 02.11.2016 C01,   G00,   G17,   G24
5                                 Philipp Koenig and   David Pothier C10 26.10.2016        D82,   G01,   G12
6                                                        Suvi Vasama  A8 26.10.2016        C73,   D82,   D86
  X7 X8 X9 X10
1 NA NA NA  NA
2 NA NA NA  NA
3 NA NA NA  NA
4 NA NA NA  NA
5 NA NA NA  NA
6 NA NA NA  NA
person Rentrop    schedule 21.11.2016