Нужна помощь в интерпретации ошибки: «read_ xml .raw» - PullRequest
0 голосов
/ 25 апреля 2020

Я следую этому уроку RSelenium и выскабливание Все работает нормально, пока я не приступлю к тестированию функции navigate_click () . ( set_names отличаются от учебника, так как мой исходный сайт отличается.)

navigate_click <- function() {
  webElem <- remDr$findElement(using = "class name",
                               "google-visualization-table-div-page")

  Sys.sleep(0.5)
  webElem$clickElement()

  remDr$getPageSource()[[1]] %>% 
    read_xml() %>%
    xml_ns_strip() %>%
    xml_find_all(xpath = '//td') %>%
    xml_text() %>%
    set_names(c("PublicationTitle", "County", "Place_of_Publication", "Library")) %>%
    as.list() %>% as_tibble()
}

Возвращает ошибку:

Ошибка в read_ xml .raw (charToRaw (enc2utf8 (x)), "UTF-8", ..., as_ html = as_ html,: xmlParseEntityRef: без имени [68]

Вот трассировка ...

> navigate_click()
Error in read_xml.raw(charToRaw(enc2utf8(x)), "UTF-8", ..., as_html = as_html,  : 
  xmlParseEntityRef: no name [68] 
11. read_xml.raw(charToRaw(enc2utf8(x)), "UTF-8", ..., as_html = as_html, 
    options = options) 
10. read_xml.character(.) 
9. read_xml(.) 
8. function_list[[i]](value) 
7. freduce(value, `_function_list`) 
6. `_fseq`(`_lhs`) 
5. eval(quote(`_fseq`(`_lhs`)), env, env) 
4. eval(quote(`_fseq`(`_lhs`)), env, env) 
3. withVisible(eval(quote(`_fseq`(`_lhs`)), env, env)) 
2. remDr$getPageSource()[[1]] %>% read_xml() %>% xml_ns_strip() %>% 
    xml_find_all(xpath = "//td") %>% xml_text() %>% set_names(c("PublicationTitle", 
    "County", "Place_of_Publication", "Library")) %>% as.list() %>% 
    as_tibble() 
1. navigate_click() 

1 Ответ

1 голос
/ 28 апреля 2020

Я нахожу блог, который вы смотрите, немного озадачивающим; мне не ясно, как могла бы работать функция navigate_click, потому что она берет источник HTML и вызывает на нем read_xml(). Хотя некоторые страницы HTML могут соответствовать строгому форматированию XML, большинство из них неправильно сформированы XML. В этих случаях read_xml выдаст ошибку.

К счастью, пакет xml2 также имеет функцию read_html, которая без проблем проанализирует вашу страницу. Однако это не исправит вашу функцию, потому что когда вы выбираете элементы td и получаете их текстовое содержимое, вы получаете односимвольный вектор, к которому затем вы не можете применить set_names.

В любом случае, пакет rvest упрощает чтение таблиц из проанализированного html.

Если вы уже сделали install.packages("rvest") и создали remDr в соответствии с вашим примером, должно работать следующее:

remDr$navigate("https://view-awesome-table.com/-Lz90gtPDhIyGUzmdMrE/view")
webElem <- remDr$findElement(using = "class name", "google-visualization-table-div-page")
Sys.sleep(0.5)
webElem$clickElement()

remDr$getPageSource()[[1]] %>%
  read_html(x) %>% 
  xml_find_all(xpath = "//*[@class = 'google-visualization-table-table']") %>%
  rvest::html_table() %>%
  `[[`(1) %>%
  `[`(c(1, 2, 3, 7)) %>%
  as_tibble()

#> # A tibble: 15 x 4
#>    PublicationTitle              County    Place_of_Publicati~ Library               
#>    <chr>                         <chr>     <chr>               <chr>                 
#>  1 ALFRETON AND DISTRICT ADVERT~ Derbyshi~ "Alfreton and Ripl~ British Library       
#>  2 ALFRETON AND DISTRICT ADVERT~ Derbyshi~ "Alfreton and Ripl~ Derbyshire: County Ha~
#>  3 ALFRETON AND DISTRICT COMING~ Derbyshi~ "Alfreton"          British Library       
#>  4 ALFRETON AND DISTRICT COMING~ Derbyshi~ "Alfreton"          Derbyshire: County Ha~
#>  5 ALFRETON AND DISTRICT ECHO    Derbyshi~ "Alfreton"          British Library       
#>  6 ALFRETON AND DISTRICT ECHO    Derbyshi~ "Alfreton"          Derbyshire: County Ha~
#>  7 ALFRETON AND RIPLEY ECHO      Derbyshi~ "Chesterfield"      British Library       
#>  8 ALFRETON AND RIPLEY ECHO      Derbyshi~ "Chesterfield"      Derbyshire: Alfreton  
#>  9 ALFRETON ARGUS                Derbyshi~ "Alfreton"          British Library       
#> 10 ALFRETON ARGUS                Derbyshi~ "Alfreton"          Derbyshire: County Ha~
#> 11 ALFRETON JOURNAL              Derbyshi~ ""                  British Library       
#> 12 ALFRETON JOURNAL              Derbyshi~ ""                  Derbyshire: Alfreton  
#> 13 ALFRETON JOURNAL              Derbyshi~ ""                  Derbyshire: County Ha~
#> 14 ALFRETON JOURNAL              Derbyshi~ ""                  Derbyshire: Magic Att~
#> 15 ALFRETON TRADER               Derbyshi~ ""                  British Library       

...