Атрибут идентификатора парсинга с использованием rvest - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь проверить, честны ли выборы Poli sh и не набрали ли кандидаты от оппозиции ненормально низкое количество голосов в округах с большим количеством недействительных голосов. Для этого мне нужно отбросить результаты каждого округа.

Ссылка на официальные результаты выборов для моего города - в нижней таблице каждая строка соответствует другому округу, и при нажатии вы будете перенаправлены в район. Ссылка имеет нестандартный формат <a ... hef = ...>, но в data-id=... закодирована переменная часть ссылки на районы.

Мой вопрос: как извлечь таблицу атрибутов data-id= на веб-страница с использованием R?

Образцы данных - в этом примере я хотел бы извлечь 697773 из данных строки

<div class="proto" style="">
    <div id="DataTables_Table_16_wrapper" class="dataTables_wrapper dt-bootstrap no-footer">
        <div class="table-responsive">
            <table class="table table-bordered table-striped table-hover dataTable no-footer clickable" id="DataTables_Table_16" role="grid">
                <thead><tr role="row"><th class="sorting_asc" tabindex="0" aria-controls="DataTables_Table_16" rowspan="1" colspan="1" aria-sort="ascending" aria-label="Numer: aktywuj, by posortować kolumnę malejąco">Numer</th><th class="sorting" tabindex="0" aria-controls="DataTables_Table_16" rowspan="1" colspan="1" aria-label="Siedziba: aktywuj, by posortować kolumnę rosnąco">Siedziba</th><th class="sorting" tabindex="0" aria-controls="DataTables_Table_16" rowspan="1" colspan="1" aria-label="Granice: aktywuj, by posortować kolumnę rosnąco">Granice</th></tr></thead>
                <tbody>
                    <tr data-id="697773" role="row" class="odd"><td class="sorting_1">1</td><td>Szkoła Podstawowa nr 63</td> <td>Bożego Ciała...</td></tr>
                </tbody>
            </table>
        </div>
    </div>
</div>

Я пробовал использовать:

library(dplyr)
library(rvest)

read_html("https://wybory.gov.pl/prezydent20200628/pl/wyniki/1/pow/26400") %>%
  html_nodes('[class="table-responsive"]') %>%
  html_nodes('[class="table table-bordered table-striped table-hover"]') %>%
  html_nodes('tr') %>%
  html_attrs()

Но Получаю named character(0) в результате

1 Ответ

0 голосов
/ 09 июля 2020

Я нашел не очень оптимальное решение. Готов поспорить, есть способ получше!

Я скачал веб-страницу, сохранил ее как текстовый файл и прочитал оттуда:

txt_webpage <-  readChar(paste0(getwd(), "\\Wyniki pierwszego głosowania _ Wrocław.txt"), 
           file.info(paste0(getwd(), "\\Wyniki pierwszego głosowania _ Wrocław.txt"))$size)
posiotions <- gregexpr(pattern ='<tr data', txt_webpage)

districts_numbers <- c()
for (i in posiotions[[1]]) {
  print (i)
  tmp <- substr(txt_webpage, i + 10, i + 22)
  tmp <- gsub('\\D+','', tmp)
  districts_numbers <- c(districts_numbers, tmp)
}
...