Используйте R для просмотра списка URL-адресов из CSV, открытия URL-адресов и оценки того, содержат ли эти сайты определенную текстовую строку. - PullRequest
0 голосов
/ 19 сентября 2019

Это может быть простой вопрос R, но я все еще учусь.

У меня есть длинный список URL-адресов из EPA, содержащихся в CSV, которые ссылаются на определенные разрешения / средства разгрузки.Каждая строка CSV содержит один URL.Некоторые URL-адреса переходят на активную страницу с информацией о доступном объекте, а другие (те, которые я в конечном итоге заинтересован в идентификации) переходят на страницу, которая гласит: «Не найден программный объект для NPDES - [номер разрешения]».

Я хочу использовать R, чтобы просмотреть этот список URL-адресов csv, открыть каждый URL-адрес и вернуть значение ИСТИНА или ЛОЖЬ в зависимости от того, хорош URL или нет.«Плохой» URL-адрес основан на том, возвращает ли страница текст «Не найдены средства программы».В идеале возвращаемые значения ИСТИНА или ЛОЖЬ можно добавить в столбец рядом с URL-адресом сайта, чтобы я мог легко просмотреть и определить, какие ссылки являются хорошими, а какие нет.

Буду признателен за любые советы, которые вы могли быесть, с чего начать!

Я смог настроить это для работы с одной ссылкой за раз, используя библиотеку (httr).

# Bad URL

site1 <- GET("https://iaspub.epa.gov/enviro/fii_query_dtl.disp_program_facility?pgm_sys_id_in=VA0086738&pgm_sys_acrnm_in=NPDES")
contents1 <- content(site1, "text")
any(grepl("No program facility found", contents1))
# [1] TRUE

# Good URL
site2 <- GET("https://iaspub.epa.gov/enviro/fii_query_dtl.disp_program_facility?pgm_sys_id_in=VAG401896&pgm_sys_acrnm_in=NPDES")
contents2 <- content(site2, "text")
any(grepl("No program facility found", contents2))
# [1] FALSE

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Мы также можем использовать rvest для этого.Предполагая, что ваши данные называются df и все ссылки присутствуют в столбце url данных, мы можем создать новый столбец (text_found) в кадре данных, который указывает, был ли найден текст ('No program facility found') вэтот URL или нет.Поэтому, если текст не найден по URL, тогда это хороший URL и наоборот.

library(rvest)
library(dplyr)

df %>%
    mutate(text_found = purrr::map_lgl(url, ~  .x %>% read_html %>% 
                      html_text() %>%  grepl('No program facility found', .)),
           Good_URL = !text_found)


                                  url       text_found    Good_URL
1 https://iaspub.epa.gov/enviro......             TRUE       FALSE
2 https://iaspub.epa.gov/enviro......            FALSE        TRUE

data

df <- data.frame(url = c("https://iaspub.epa.gov/enviro/fii_query_dtl.disp_program_facility?pgm_sys_id_in=VA0086738&pgm_sys_acrnm_in=NPDES", 
                         "https://iaspub.epa.gov/enviro/fii_query_dtl.disp_program_facility?pgm_sys_id_in=VAG401896&pgm_sys_acrnm_in=NPDES"), 
                 stringsAsFactors = FALSE)
0 голосов
/ 19 сентября 2019

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

 library(httr) 

Я написал следующие строки, чтобы написать набор данных, который будет использоваться другими читателями (вы можете пропустить это и начать со следующего блокакода):

#stackoverflow_question_links<- data.frame("Links"=c("https://iaspub.epa.gov/enviro/fii_query_dtl.disp_program_facility?pgm_sys_id_in=VA0086738&pgm_sys_acrnm_in=NPDES","https://iaspub.epa.gov/enviro/fii_query_dtl.disp_program_facility?pgm_sys_id_in=VAG401896&pgm_sys_acrnm_in=NPDES"))
#write.csv(stackoverflow_question_links, "stackoverflow_question_links.csv")

Предполагая, что ваш набор данных называется "stackoverflow_question_links.csv", мы начинаем читать его в R:

fileName <- "stackoverflow_question_links.csv"
con <- file(fileName,open="r")
lin <-readLines(con)
save<-NULL #initialize save, to save the links with their status (true/false)
for (i in 2:length(lin)){
  site <- GET(lin[i])
  contents <- content(site, "text")
  save<-rbind(save, data.frame("Link" = lin[i],"Status"=any(grepl("No program facility found", contents))))
}
close(conn)
View(save) #or write.csv(save, "links_status.csv") 

enter image description here

...