Всплывающая таблица просмотра веб-страниц без кнопки отправки с использованием R - PullRequest
1 голос
/ 25 мая 2019

Я пытаюсь очистить почтовые индексы от "https://www.zipcodestogo.com/county-zip-code-list.htm",, где штаты и округа будут предоставлены в наборе данных. Возьмите Алабаму, Дейл в качестве примера (показано ниже). Однако, когда я использую Гаджет выбора, чтобы извлечь таблицу, она не появляется, и когда я смотрю на исходный код, я также не нахожу эту таблицу. Я не уверен, как решить эту проблему. Я очень плохо знаком с веб-скребком, поэтому я заранее извиняюсь, если это глупый вопрос. Спасибо.

zipurl = 'https://www.zipcodestogo.com/county-zip-code-list.htm'
query = list('State:'="Alabama",
              'Counties:'="Dale"
)
website = POST(zipurl, body = query,encode = "form")
tables <- html_nodes(content(website), css = 'table')

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Та же идея, но захват таблицы и удаление заголовка

library(rvest)
state = "ALABAMA"
county = "DALE"
url = paste0("https://www.zipcodestogo.com/lookups/countyZipCodes.php?state=",state,"&county=",county)

r <- read_html(url) %>%
  html_node("table table") %>% 
  html_table()%>%
  slice(-1)

print(r)

Тогда столбец только по почтовым индексам:

r$X1

Вы также можете ограничиться первым столбцом таблицы и удалитьпервый ряд:

r <- read_html(url) %>%
  html_nodes("table table td:nth-of-type(1)") %>% 
  html_text() %>% 
  as.character

print(r[-1])
1 голос
/ 25 мая 2019

Вы можете использовать ссылки, которые вы можете найти в своем браузере в Проверить > вкладка Сеть

Вот решение:

state = "ALABAMA"
county = "DALE"
url_scrape = paste0("https://www.zipcodestogo.com/lookups/countyZipCodes.php?state=",state,"&county=",county) # Inspect > Network > XHR links

# function => First letter Capital (needed for regexp)
capwords <- function(s, strict = T) { # You can find this function on the forum
  cap <- function(s) paste(toupper(substring(s, 1, 1)),
                           {s <- substring(s, 2); if(strict) tolower(s) else s},
                           sep = "", collapse = " " )
  sapply(strsplit(s, split = " "), cap, USE.NAMES = !is.null(names(s)))
}

zip_codes = read_html(url_scrape) %>% html_nodes("td") %>% html_text()
zip_codes = zip_codes[-c(1:6)] # Delete header
string_regexp = paste0(capwords(state),"|View") # pattern as var
zip_codes = zip_codes[-grep(pattern = string_regexp,zip_codes)]
df = data.frame(zip = zip_codes[grep("\\d",zip_codes)], label = zip_codes[-grep("\\d",zip_codes)])
...