#Gobierno

##Extraer textos El código realizado recorre una lista de URLs, realiza scraping de párrafos de texto específicos en cada página y guarda esos párrafos en archivos de texto distintos en una carpeta especificada. El nombre de cada archivo se basa en el contador y el año correspondiente, y el código imprime mensajes indicando la URL procesada y la ubicación del archivo guardado. Este proceso se repite para cada URL en la lista; para la lista de URLs de cada año sucesivamente. ###2019

# Cargar bibliotecas
library(rvest)
library(stringr)

# Lista de URLs que deseas scrapear
urls <- c(
  "https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/conadis/articulos/la-educacion-y-personas-con-discapacidad&sa=U&ved=2ahUKEwio1cCsmqiCAxVClmoFHWwNCYI4ChAWegQICRAC&usg=AOvVaw2ZxPGDQC1pdIanX-DfJ5b0",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/difnacional/articulos/credencial-nacional-para-personas-con-discapacidad-200159&sa=U&ved=2ahUKEwif-Y2hm6iCAxX2kmoFHcZ3AOw4HhAWegQICRAB&usg=AOvVaw2ASBNH5bnWoe0rD6_eVB3k",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/profeco/documentos/los-derechos-de-las-personas-con-discapacidad-como-consumidoras%3Fstate%3Dpublished&sa=U&ved=2ahUKEwiFlI7TnaiCAxXjlmoFHcQ2BYc4UBAWegQIBhAC&usg=AOvVaw2mKLZDVIhf4vg-6eqRmO6l",
"https://sidof.segob.gob.mx/busquedaAvanzada/busqueda?tipo=C&tipotexto=F&texto=Personas%20con%20discapacidad&fechainicio=01-01-2019&fechahasta=31-12-2019&organismos=PL,PE,PJ,OA,EPE,OD,CV,VG,AV,TODOS&sinonimos=true",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/cultura/prensa/vibra-chiapas-con-el-festival-internacional-de-marimbistas-222054&sa=U&ved=2ahUKEwjstOzCoKiCAxVlkGoFHS3BCGw4ChAWegQIAxAC&usg=AOvVaw1HaLsK-g5Mq8hN9H5Xk6CF",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/presidencia/articulos/version-estenografica-del-presidente-durante-la-entrega-de-los-programas-integrales-de-bienestar-en-san-luis-potosi&sa=U&ved=2ahUKEwiP-YG3oaiCAxXSgGoFHeL0CGw4UBAWegQIBRAC&usg=AOvVaw2UYMnXpcpoEoZ-eMxc51ba",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/issste/acciones-y-programas/programas-de-radio-ya-oissste-2019&sa=U&ved=2ahUKEwjP2fCao6iCAxVmk2oFHXCrANk4FBAWegQIAhAB&usg=AOvVaw1ZVI9YrUEIlfB9ZlFSfh-e",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/imta/articulos/impulsar-actividades-de-divulgacion-para-personas-con-discapacidad-nuevo-reto-en-el-quehacer-del-imta&sa=U&ved=2ahUKEwjH15zMo6iCAxWPomoFHVbRCt84KBAWegQIAxAC&usg=AOvVaw36iqD4XgcE7nYdaEji_VGA",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/salud/es/articulos/salud-y-bienestar-5%3Fidiom%3Des&sa=U&ved=2ahUKEwjM_9feo6iCAxU8nGoFHfyRB144MhAWegQICBAC&usg=AOvVaw1oZwNNJr00nluGZIrHdoEW",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/salud/prensa/se-llevara-a-cabo-la-1-carrera-sectorial-de-salud-conade-215324&sa=U&ved=2ahUKEwiwgILKpKiCAxVPg2oFHW0wDFk4RhAWegQICBAC&usg=AOvVaw2eAYQMDVuFN3NO0VvrYtvH",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/sectur/prensa/llega-a-la-ciudad-de-mexico-la-carrera-panamericana&sa=U&ved=2ahUKEwjWu8vkpKiCAxUNlGoFHSu4B7w4UBAWegQIBhAC&usg=AOvVaw2zCw6moLtlOzCDdetB9Lbq",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/inifap/prensa/huertos-urbanos-para-la-seguridad-alimentaria-y-la-salud-en-veracruz&sa=U&ved=2ahUKEwjWu8vkpKiCAxUNlGoFHSu4B7w4UBAWegQIBRAC&usg=AOvVaw3ao6FTZ-N4yFNoqQLc0ZzW",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/imss/prensa/com-314-se-llevara-a-cabo-la-1-carrera-sectorial-de-salud-conade&sa=U&ved=2ahUKEwiqs_P7pKiCAxVdkmoFHZ3WDSs4WhAWegQIABAC&usg=AOvVaw08YhV2mxAwUMYEFq7wkllz",
"https://www.gob.mx/salud/prensa/se-llevara-a-cabo-la-1-carrera-sectorial-de-salud-conade-215324?idiom=es-MX",
"https://www.gob.mx/presidencia/articulos/version-estenografica-de-la-conferencia-de-prensa-matutina-viernes-6-de-septiembre-2019?idiom=es", #"https://sidof.segob.gob.mx/notas/docFuente/5551176",
"https://sidof.segob.gob.mx/notas/docFuente/5551140",
"https://sidof.segob.gob.mx/notas/docFuente/5551351",
"https://sidof.segob.gob.mx/notas/docFuente/5555735",
"https://sidof.segob.gob.mx/notas/docFuente/5554923",
"https://sidof.segob.gob.mx/notas/docFuente/5566028",
"https://sidof.segob.gob.mx/notas/docFuente/5570425",
"https://sidof.segob.gob.mx/notas/docFuente/5570421",
"https://sidof.segob.gob.mx/notas/docFuente/5570422",
"https://sidof.segob.gob.mx/notas/docFuente/5570423",
"https://sidof.segob.gob.mx/notas/docFuente/5570424",
"https://sidof.segob.gob.mx/notas/docFuente/5570591",
"https://sidof.segob.gob.mx/notas/docFuente/5570589",
"https://sidof.segob.gob.mx/notas/docFuente/5570590",
"https://sidof.segob.gob.mx/notas/docFuente/5570586",
"https://sidof.segob.gob.mx/notas/docFuente/5570587",
"https://sidof.segob.gob.mx/notas/docFuente/5570588",
"https://sidof.segob.gob.mx/notas/docFuente/5570592",
"https://sidof.segob.gob.mx/notas/docFuente/5570667",
"https://sidof.segob.gob.mx/notas/docFuente/5570671",
"https://sidof.segob.gob.mx/notas/docFuente/5570668",
"https://sidof.segob.gob.mx/notas/docFuente/5570669",
"https://sidof.segob.gob.mx/notas/docFuente/5570670",
"https://sidof.segob.gob.mx/notas/docFuente/5570866",
"https://sidof.segob.gob.mx/notas/docFuente/5570868",
"https://sidof.segob.gob.mx/notas/docFuente/5570867",
"https://sidof.segob.gob.mx/notas/docFuente/5571022",
"https://sidof.segob.gob.mx/notas/docFuente/5571019",
"https://sidof.segob.gob.mx/notas/docFuente/5571020",
"https://sidof.segob.gob.mx/notas/docFuente/5571021",
"https://sidof.segob.gob.mx/notas/docFuente/5572817",
"https://sidof.segob.gob.mx/notas/docFuente/5575558",
"https://sidof.segob.gob.mx/notas/docFuente/5579722",
"https://sidof.segob.gob.mx/notas/docFuente/5583028","https://sidof.segob.gob.mx/notas/docFuente/5559300",
"https://sidof.segob.gob.mx/notas/docFuente/5559298",
"https://sidof.segob.gob.mx/notas/docFuente/5559298",
"https://sidof.segob.gob.mx/notas/docFuente/5559300",
"https://sidof.segob.gob.mx/notas/docFuente/5554796",
"https://sidof.segob.gob.mx/notas/docFuente/5552014"
)

# Función para extraer texto de los elementos "p" y "span"
extract_text <- function(url) {
  webpage <- read_html(url)
  p_text <- html_text(html_nodes(webpage, "p"))
  span_text <- html_text(html_nodes(webpage, "span"))
  return(c(p_text, span_text))
}

# Bucle para recorrer las URLs
contador19 <- 1
carpeta <- "/Users/abby/Documents/5to/CD II/Reto/Gob/2019"  

for (url in urls) {
  # Aplicar la función a cada URL
  datos <- extract_text(url)
  
  # Guardar los datos en un archivo de texto
  nombre_archivo <- file.path(carpeta, paste0("datos_2019_", contador19, ".txt"))# Nombre del archivo basado en el número en la URL
  writeLines(datos, nombre_archivo)
  contador19 <<- contador19 + 1

  cat("Datos de", url, "guardados en", nombre_archivo, "\n")
}
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/conadis/articulos/la-educacion-y-personas-con-discapacidad&sa=U&ved=2ahUKEwio1cCsmqiCAxVClmoFHWwNCYI4ChAWegQICRAC&usg=AOvVaw2ZxPGDQC1pdIanX-DfJ5b0 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_1.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/difnacional/articulos/credencial-nacional-para-personas-con-discapacidad-200159&sa=U&ved=2ahUKEwif-Y2hm6iCAxX2kmoFHcZ3AOw4HhAWegQICRAB&usg=AOvVaw2ASBNH5bnWoe0rD6_eVB3k guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_2.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/profeco/documentos/los-derechos-de-las-personas-con-discapacidad-como-consumidoras%3Fstate%3Dpublished&sa=U&ved=2ahUKEwiFlI7TnaiCAxXjlmoFHcQ2BYc4UBAWegQIBhAC&usg=AOvVaw2mKLZDVIhf4vg-6eqRmO6l guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_3.txt 
## Datos de https://sidof.segob.gob.mx/busquedaAvanzada/busqueda?tipo=C&tipotexto=F&texto=Personas%20con%20discapacidad&fechainicio=01-01-2019&fechahasta=31-12-2019&organismos=PL,PE,PJ,OA,EPE,OD,CV,VG,AV,TODOS&sinonimos=true guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_4.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/cultura/prensa/vibra-chiapas-con-el-festival-internacional-de-marimbistas-222054&sa=U&ved=2ahUKEwjstOzCoKiCAxVlkGoFHS3BCGw4ChAWegQIAxAC&usg=AOvVaw1HaLsK-g5Mq8hN9H5Xk6CF guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_5.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/presidencia/articulos/version-estenografica-del-presidente-durante-la-entrega-de-los-programas-integrales-de-bienestar-en-san-luis-potosi&sa=U&ved=2ahUKEwiP-YG3oaiCAxXSgGoFHeL0CGw4UBAWegQIBRAC&usg=AOvVaw2UYMnXpcpoEoZ-eMxc51ba guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_6.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/issste/acciones-y-programas/programas-de-radio-ya-oissste-2019&sa=U&ved=2ahUKEwjP2fCao6iCAxVmk2oFHXCrANk4FBAWegQIAhAB&usg=AOvVaw1ZVI9YrUEIlfB9ZlFSfh-e guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_7.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/imta/articulos/impulsar-actividades-de-divulgacion-para-personas-con-discapacidad-nuevo-reto-en-el-quehacer-del-imta&sa=U&ved=2ahUKEwjH15zMo6iCAxWPomoFHVbRCt84KBAWegQIAxAC&usg=AOvVaw36iqD4XgcE7nYdaEji_VGA guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_8.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/salud/es/articulos/salud-y-bienestar-5%3Fidiom%3Des&sa=U&ved=2ahUKEwjM_9feo6iCAxU8nGoFHfyRB144MhAWegQICBAC&usg=AOvVaw1oZwNNJr00nluGZIrHdoEW guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_9.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/salud/prensa/se-llevara-a-cabo-la-1-carrera-sectorial-de-salud-conade-215324&sa=U&ved=2ahUKEwiwgILKpKiCAxVPg2oFHW0wDFk4RhAWegQICBAC&usg=AOvVaw2eAYQMDVuFN3NO0VvrYtvH guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_10.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/sectur/prensa/llega-a-la-ciudad-de-mexico-la-carrera-panamericana&sa=U&ved=2ahUKEwjWu8vkpKiCAxUNlGoFHSu4B7w4UBAWegQIBhAC&usg=AOvVaw2zCw6moLtlOzCDdetB9Lbq guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_11.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/inifap/prensa/huertos-urbanos-para-la-seguridad-alimentaria-y-la-salud-en-veracruz&sa=U&ved=2ahUKEwjWu8vkpKiCAxUNlGoFHSu4B7w4UBAWegQIBRAC&usg=AOvVaw3ao6FTZ-N4yFNoqQLc0ZzW guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_12.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/imss/prensa/com-314-se-llevara-a-cabo-la-1-carrera-sectorial-de-salud-conade&sa=U&ved=2ahUKEwiqs_P7pKiCAxVdkmoFHZ3WDSs4WhAWegQIABAC&usg=AOvVaw08YhV2mxAwUMYEFq7wkllz guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_13.txt 
## Datos de https://www.gob.mx/salud/prensa/se-llevara-a-cabo-la-1-carrera-sectorial-de-salud-conade-215324?idiom=es-MX guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_14.txt 
## Datos de https://www.gob.mx/presidencia/articulos/version-estenografica-de-la-conferencia-de-prensa-matutina-viernes-6-de-septiembre-2019?idiom=es guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_15.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5551140 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_16.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5551351 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_17.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5555735 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_18.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5554923 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_19.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5566028 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_20.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570425 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_21.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570421 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_22.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570422 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_23.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570423 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_24.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570424 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_25.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570591 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_26.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570589 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_27.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570590 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_28.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570586 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_29.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570587 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_30.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570588 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_31.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570592 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_32.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570667 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_33.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570671 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_34.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570668 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_35.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570669 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_36.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570670 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_37.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570866 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_38.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570868 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_39.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5570867 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_40.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5571022 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_41.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5571019 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_42.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5571020 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_43.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5571021 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_44.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5572817 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_45.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5575558 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_46.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5579722 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_47.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5583028 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_48.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5559300 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_49.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5559298 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_50.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5559298 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_51.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5559300 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_52.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5554796 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_53.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5552014 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2019/datos_2019_54.txt

###2020

# Cargar bibliotecas
library(rvest)
library(stringr)

# Lista de URLs que deseas scrapear
urls <- c(  "https://www.gob.mx/bienestar/documentos/personas-con-discapacidad-250279?state=published",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/stps/es/articulos/pensiones-para-el-bienestar-de-personas-con-discapacidad-y-de-adultos-mayores-conferencias-sobre-programas-del-bienestar%3Fidiom%3Des&sa=U&ved=2ahUKEwio1cCsmqiCAxVClmoFHWwNCYI4ChAWegQIBRAC&usg=AOvVaw3ipFTMQeIByN1jQnd5aI-Y",
"https://www.gob.mx/bienestar/prensa/pension-para-personas-con-discapacidad-derecho-constitucional-y-politica-nacional-historica",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/issste/acciones-y-programas/programa-atencion-a-personas-con-discapacidad&sa=U&ved=2ahUKEwjgrOr1mqiCAxU2lGoFHUXTA_A4FBAWegQIAxAB&usg=AOvVaw2V6GyOROBTOgEyaSfD5rnY",
"https://www.gob.mx/inmujeres/acciones-y-programas/cartilla-de-derechos-sexuales-y-derechos-reproductivos-de-las-personas-con-discapacidad-180927",
"https://www.gob.mx/afac/acciones-y-programas/personas-con-discapacidad-245496",
"https://www.gob.mx/difnacional/acciones-y-programas/credencial-nacional-para-personas-con-discapacidad-239815",
"https://www.gob.mx/bienestar/prensa/inicia-el-3-de-noviembre-pago-de-las-pensiones-para-el-bienestar-en-todo-el-pais?idiom=es",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/difnacional/documentos/como-auxiliar-a-una-persona-con-discapacidad-durante-una-emergencia&sa=U&ved=2ahUKEwjvhtT2naiCAxUBlGoFHT0GAeA4WhAWegQIBhAC&usg=AOvVaw1pujS9jZkjN8iPkolsgfeA",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/stps/articulos/programa-de-pension-para-el-bienestar-de-personas-con-discapacidad-conferencias-sobre-programas-del-bienestar&sa=U&ved=2ahUKEwiJ1MrXoKiCAxWSkGoFHeKPBIo4FBAWegQICRAC&usg=AOvVaw1Adkb1LmdEUEBnW_jGCp-w",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/stps/articulos/balance-bienestar-impacto-de-programas-integrales-conferencias-sobre-programas-del-bienestar%3Fidiom%3Des&sa=U&ved=2ahUKEwiJ1MrXoKiCAxWSkGoFHeKPBIo4FBAWegQIAhAC&usg=AOvVaw19e0yH7sQ-f1-Gn8qa1o00",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/cms/uploads/attachment/file/555426/ITP_RIS_PACS_2020.pdf&sa=U&ved=2ahUKEwiJ1MrXoKiCAxWSkGoFHeKPBIo4FBAWegQIBBAC&usg=AOvVaw2rnVcFOfaFhftNhyGps99X",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/stps/es/articulos/la-linea-del-bienestar-conferencias-sobre-programas-del-bienestar%3Fidiom%3Des&sa=U&ved=2ahUKEwiP-YG3oaiCAxXSgGoFHeL0CGw4UBAWegQIBBAC&usg=AOvVaw0ZVd2UfTeRoFFazXo8u70e",
"https://www.gob.mx/conavi/acciones-y-programas/programa-emergente-de-vivienda",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/sedena/prensa/se-recuperaron-mas-de-124-000-litros-de-hidrocarburo%3Fidiom%3Des-MX&sa=U&ved=2ahUKEwjH15zMo6iCAxWPomoFHVbRCt84KBAWegQIBRAC&usg=AOvVaw2t07-0AxAnWRPVzgOzz3dR",
"https://www.gob.mx/condusef/prensa/utiliza-nuestros-medios-remotos-para-recibir-asesoria-orientacion-presentar-una-queja-o-tener-una-conciliacion-telefonica",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/sedena/prensa/acciones-del-plan-conjunto-del-gobierno-de-mexico-para-combatir-el-robo-de-hidrocarburos-de-pemex-en-edo-mex-b-c-hgo-tab-y-tamps%3Fidiom%3Des-MX&sa=U&ved=2ahUKEwjToPWxpKiCAxVrmmoFHZ_dDSA4PBAWegQICBAC&usg=AOvVaw0zTVTw8KI9UShLcoU6_REe",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/liconsa/articulos/reinauguran-lecheria-liconsa-en-texcoco&sa=U&ved=2ahUKEwiwgILKpKiCAxVPg2oFHW0wDFk4RhAWegQIBhAC&usg=AOvVaw3ZnXr8uBxcaHIPaoCntzrd",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/sedena/prensa/se-recuperaron-mas-de-124-000-litros-de-hidrocarburo&sa=U&ved=2ahUKEwjWu8vkpKiCAxUNlGoFHSu4B7w4UBAWegQICRAC&usg=AOvVaw16qNmoaHimb5GrWnPf6GPE",
"https://sidof.segob.gob.mx/notas/docFuente/5608847",
"https://sidof.segob.gob.mx/notas/docFuente/5608441",
"https://sidof.segob.gob.mx/notas/docFuente/5597114",
"https://sidof.segob.gob.mx/notas/docFuente/5595307",
"https://sidof.segob.gob.mx/notas/docFuente/5595031",
"https://sidof.segob.gob.mx/notas/docFuente/5595030",
"https://sidof.segob.gob.mx/notas/docFuente/5594376",
"https://sidof.segob.gob.mx/notas/docFuente/5594377",
"https://sidof.segob.gob.mx/notas/docFuente/5587914",
"https://sidof.segob.gob.mx/notas/docFuente/5585992",
"https://sidof.segob.gob.mx/notas/docFuente/5585641","https://sidof.segob.gob.mx/notas/docFuente/5604780",
"https://sidof.segob.gob.mx/notas/docFuente/5588429",
"https://sidof.segob.gob.mx/notas/docFuente/5609280",
"https://sidof.segob.gob.mx/notas/docFuente/5609085",
"https://sidof.segob.gob.mx/notas/docFuente/5609175",
"https://sidof.segob.gob.mx/notas/docFuente/5608467"
)

# Función para extraer texto de los elementos "p" y "span"
extract_text <- function(url) {
  webpage <- read_html(url)
  p_text <- html_text(html_nodes(webpage, "p"))
  span_text <- html_text(html_nodes(webpage, "span"))
  return(c(p_text, span_text))
}

# Bucle para recorrer las URLs
contador20 <- 1
carpeta <- "/Users/abby/Documents/5to/CD II/Reto/Gob/2020"  

for (url in urls) {
  # Aplicar la función a cada URL
  datos <- extract_text(url)
  
  # Guardar los datos en un archivo de texto
  nombre_archivo <- file.path(carpeta, paste0("datos_2020_", contador20, ".txt"))# Nombre del archivo basado en el número en la URL
  writeLines(datos, nombre_archivo)
  contador20 <<- contador20 + 1

  cat("Datos de", url, "guardados en", nombre_archivo, "\n")
}
## Datos de https://www.gob.mx/bienestar/documentos/personas-con-discapacidad-250279?state=published guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_1.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/stps/es/articulos/pensiones-para-el-bienestar-de-personas-con-discapacidad-y-de-adultos-mayores-conferencias-sobre-programas-del-bienestar%3Fidiom%3Des&sa=U&ved=2ahUKEwio1cCsmqiCAxVClmoFHWwNCYI4ChAWegQIBRAC&usg=AOvVaw3ipFTMQeIByN1jQnd5aI-Y guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_2.txt 
## Datos de https://www.gob.mx/bienestar/prensa/pension-para-personas-con-discapacidad-derecho-constitucional-y-politica-nacional-historica guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_3.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/issste/acciones-y-programas/programa-atencion-a-personas-con-discapacidad&sa=U&ved=2ahUKEwjgrOr1mqiCAxU2lGoFHUXTA_A4FBAWegQIAxAB&usg=AOvVaw2V6GyOROBTOgEyaSfD5rnY guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_4.txt 
## Datos de https://www.gob.mx/inmujeres/acciones-y-programas/cartilla-de-derechos-sexuales-y-derechos-reproductivos-de-las-personas-con-discapacidad-180927 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_5.txt 
## Datos de https://www.gob.mx/afac/acciones-y-programas/personas-con-discapacidad-245496 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_6.txt 
## Datos de https://www.gob.mx/difnacional/acciones-y-programas/credencial-nacional-para-personas-con-discapacidad-239815 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_7.txt 
## Datos de https://www.gob.mx/bienestar/prensa/inicia-el-3-de-noviembre-pago-de-las-pensiones-para-el-bienestar-en-todo-el-pais?idiom=es guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_8.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/difnacional/documentos/como-auxiliar-a-una-persona-con-discapacidad-durante-una-emergencia&sa=U&ved=2ahUKEwjvhtT2naiCAxUBlGoFHT0GAeA4WhAWegQIBhAC&usg=AOvVaw1pujS9jZkjN8iPkolsgfeA guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_9.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/stps/articulos/programa-de-pension-para-el-bienestar-de-personas-con-discapacidad-conferencias-sobre-programas-del-bienestar&sa=U&ved=2ahUKEwiJ1MrXoKiCAxWSkGoFHeKPBIo4FBAWegQICRAC&usg=AOvVaw1Adkb1LmdEUEBnW_jGCp-w guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_10.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/stps/articulos/balance-bienestar-impacto-de-programas-integrales-conferencias-sobre-programas-del-bienestar%3Fidiom%3Des&sa=U&ved=2ahUKEwiJ1MrXoKiCAxWSkGoFHeKPBIo4FBAWegQIAhAC&usg=AOvVaw19e0yH7sQ-f1-Gn8qa1o00 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_11.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/cms/uploads/attachment/file/555426/ITP_RIS_PACS_2020.pdf&sa=U&ved=2ahUKEwiJ1MrXoKiCAxWSkGoFHeKPBIo4FBAWegQIBBAC&usg=AOvVaw2rnVcFOfaFhftNhyGps99X guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_12.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/stps/es/articulos/la-linea-del-bienestar-conferencias-sobre-programas-del-bienestar%3Fidiom%3Des&sa=U&ved=2ahUKEwiP-YG3oaiCAxXSgGoFHeL0CGw4UBAWegQIBBAC&usg=AOvVaw0ZVd2UfTeRoFFazXo8u70e guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_13.txt 
## Datos de https://www.gob.mx/conavi/acciones-y-programas/programa-emergente-de-vivienda guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_14.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/sedena/prensa/se-recuperaron-mas-de-124-000-litros-de-hidrocarburo%3Fidiom%3Des-MX&sa=U&ved=2ahUKEwjH15zMo6iCAxWPomoFHVbRCt84KBAWegQIBRAC&usg=AOvVaw2t07-0AxAnWRPVzgOzz3dR guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_15.txt 
## Datos de https://www.gob.mx/condusef/prensa/utiliza-nuestros-medios-remotos-para-recibir-asesoria-orientacion-presentar-una-queja-o-tener-una-conciliacion-telefonica guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_16.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/sedena/prensa/acciones-del-plan-conjunto-del-gobierno-de-mexico-para-combatir-el-robo-de-hidrocarburos-de-pemex-en-edo-mex-b-c-hgo-tab-y-tamps%3Fidiom%3Des-MX&sa=U&ved=2ahUKEwjToPWxpKiCAxVrmmoFHZ_dDSA4PBAWegQICBAC&usg=AOvVaw0zTVTw8KI9UShLcoU6_REe guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_17.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/liconsa/articulos/reinauguran-lecheria-liconsa-en-texcoco&sa=U&ved=2ahUKEwiwgILKpKiCAxVPg2oFHW0wDFk4RhAWegQIBhAC&usg=AOvVaw3ZnXr8uBxcaHIPaoCntzrd guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_18.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/sedena/prensa/se-recuperaron-mas-de-124-000-litros-de-hidrocarburo&sa=U&ved=2ahUKEwjWu8vkpKiCAxUNlGoFHSu4B7w4UBAWegQICRAC&usg=AOvVaw16qNmoaHimb5GrWnPf6GPE guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_19.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5608847 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_20.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5608441 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_21.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5597114 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_22.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5595307 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_23.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5595031 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_24.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5595030 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_25.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5594376 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_26.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5594377 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_27.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5587914 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_28.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5585992 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_29.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5585641 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_30.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5604780 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_31.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5588429 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_32.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5609280 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_33.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5609085 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_34.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5609175 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_35.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5608467 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2020/datos_2020_36.txt

###2021

library(rvest)
library(stringr)

# Lista de URLs que deseas scrapear
urls <- c(  "https://www.gob.mx/issste/articulos/hablemos-de-discapacidad?idiom=es",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/salud/prensa/530-con-discapacidad-auditiva-2-3-millones-de-personas-instituto-nacional-de-rehabilitacion%3Fidiom%3Des&sa=U&ved=2ahUKEwjQusz9nKiCAxVsmGoFHZmhCCU4MhAWegQIBxAC&usg=AOvVaw1lrCmkP5T6iTNWjaonM0CU",
"https://www.gob.mx/cultura/prensa/con-la-develacion-de-una-placa-conmemorativa-por-sus-150-representaciones-la-plaza-de-juan-y-juana-concluye-su-temporada-en-el-helenico", "https://sidof.segob.gob.mx/notas/docFuente/5638368",
"https://sidof.segob.gob.mx/notas/docFuente/5637587",
"https://sidof.segob.gob.mx/notas/docFuente/5635321",
"https://sidof.segob.gob.mx/notas/docFuente/5635287",
"https://sidof.segob.gob.mx/notas/docFuente/5630835",
"https://sidof.segob.gob.mx/notas/docFuente/5627750",
"https://sidof.segob.gob.mx/notas/docFuente/5625538",
"https://sidof.segob.gob.mx/notas/docFuente/5623645",
"https://sidof.segob.gob.mx/notas/docFuente/5622019",
"https://sidof.segob.gob.mx/notas/docFuente/5620785",
"https://sidof.segob.gob.mx/notas/docFuente/5617662",
"https://sidof.segob.gob.mx/notas/docFuente/5616248",
"https://sidof.segob.gob.mx/notas/docFuente/5613613",
"https://sidof.segob.gob.mx/notas/docFuente/5612348",
"https://sidof.segob.gob.mx/notas/docFuente/5639631",
"https://sidof.segob.gob.mx/notas/docFuente/5639173",
"https://sidof.segob.gob.mx/notas/docFuente/5630835",
"https://sidof.segob.gob.mx/notas/docFuente/5625354",
"https://sidof.segob.gob.mx/notas/docFuente/5623459",
"https://sidof.segob.gob.mx/notas/docFuente/5622959",
"https://sidof.segob.gob.mx/notas/docFuente/5621645",
"https://sidof.segob.gob.mx/notas/docFuente/5620223",
"https://sidof.segob.gob.mx/notas/docFuente/5617045",
"https://sidof.segob.gob.mx/notas/docFuente/5616261",
"https://sidof.segob.gob.mx/notas/docFuente/5616185",
"https://sidof.segob.gob.mx/notas/docFuente/5616185",
"https://sidof.segob.gob.mx/notas/docFuente/5639618",
"https://sidof.segob.gob.mx/notas/docFuente/5639414",
"https://sidof.segob.gob.mx/notas/docFuente/5636727",
"https://sidof.segob.gob.mx/notas/docFuente/5630092",
"https://sidof.segob.gob.mx/notas/docFuente/5624455",
"https://sidof.segob.gob.mx/notas/docFuente/5622244",
"https://sidof.segob.gob.mx/notas/docFuente/5622243",
"https://sidof.segob.gob.mx/notas/docFuente/5620724",
"https://sidof.segob.gob.mx/notas/docFuente/5620725",
"https://sidof.segob.gob.mx/notas/docFuente/5620723",
"https://sidof.segob.gob.mx/notas/docFuente/5620722",
"https://sidof.segob.gob.mx/notas/docFuente/5620721",
"https://sidof.segob.gob.mx/notas/docFuente/5620720",
"https://sidof.segob.gob.mx/notas/docFuente/5620555",
"https://sidof.segob.gob.mx/notas/docFuente/5620554",
"https://sidof.segob.gob.mx/notas/docFuente/5620553",
"https://sidof.segob.gob.mx/notas/docFuente/5620557",
"https://sidof.segob.gob.mx/notas/docFuente/5620556",
"https://sidof.segob.gob.mx/notas/docFuente/5620376",
"https://sidof.segob.gob.mx/notas/docFuente/5620381",
"https://sidof.segob.gob.mx/notas/docFuente/5620377",
"https://sidof.segob.gob.mx/notas/docFuente/5620557",
"https://sidof.segob.gob.mx/notas/docFuente/5620556",
"https://sidof.segob.gob.mx/notas/docFuente/5620376",
"https://sidof.segob.gob.mx/notas/docFuente/5620381",
"https://sidof.segob.gob.mx/notas/docFuente/5620377",
"https://sidof.segob.gob.mx/notas/docFuente/5620380",
"https://sidof.segob.gob.mx/notas/docFuente/5620379",
"https://sidof.segob.gob.mx/notas/docFuente/5620378",
"https://sidof.segob.gob.mx/notas/docFuente/5620229",
"https://sidof.segob.gob.mx/notas/docFuente/5620230",
"https://sidof.segob.gob.mx/notas/docFuente/5620228",
"https://sidof.segob.gob.mx/notas/docFuente/5620227",
"https://sidof.segob.gob.mx/notas/docFuente/5620226",
"https://sidof.segob.gob.mx/notas/docFuente/5620225",
"https://sidof.segob.gob.mx/notas/docFuente/5620119",
"https://sidof.segob.gob.mx/notas/docFuente/5620123",
"https://sidof.segob.gob.mx/notas/docFuente/5620120",
"https://sidof.segob.gob.mx/notas/docFuente/5620122",
"https://sidof.segob.gob.mx/notas/docFuente/5622671"
)


# Bucle para recorrer las URLs
contador21 <- 1
carpeta <- "/Users/abby/Documents/5to/CD II/Reto/Gob/2021"  

for (url in urls) {
  # Aplicar la función a cada URL
  datos <- extract_text(url)
  
  # Guardar los datos en un archivo de texto
  nombre_archivo <- file.path(carpeta, paste0("datos_2021_", contador21, ".txt"))# Nombre del archivo basado en el número en la URL
  writeLines(datos, nombre_archivo)
  contador21 <<- contador21 + 1

  cat("Datos de", url, "guardados en", nombre_archivo, "\n")
}
## Datos de https://www.gob.mx/issste/articulos/hablemos-de-discapacidad?idiom=es guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_1.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/salud/prensa/530-con-discapacidad-auditiva-2-3-millones-de-personas-instituto-nacional-de-rehabilitacion%3Fidiom%3Des&sa=U&ved=2ahUKEwjQusz9nKiCAxVsmGoFHZmhCCU4MhAWegQIBxAC&usg=AOvVaw1lrCmkP5T6iTNWjaonM0CU guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_2.txt 
## Datos de https://www.gob.mx/cultura/prensa/con-la-develacion-de-una-placa-conmemorativa-por-sus-150-representaciones-la-plaza-de-juan-y-juana-concluye-su-temporada-en-el-helenico guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_3.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5638368 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_4.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5637587 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_5.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5635321 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_6.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5635287 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_7.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5630835 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_8.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5627750 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_9.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5625538 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_10.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5623645 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_11.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5622019 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_12.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620785 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_13.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5617662 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_14.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5616248 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_15.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5613613 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_16.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5612348 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_17.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5639631 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_18.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5639173 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_19.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5630835 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_20.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5625354 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_21.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5623459 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_22.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5622959 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_23.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5621645 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_24.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620223 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_25.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5617045 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_26.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5616261 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_27.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5616185 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_28.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5616185 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_29.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5639618 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_30.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5639414 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_31.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5636727 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_32.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5630092 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_33.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5624455 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_34.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5622244 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_35.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5622243 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_36.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620724 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_37.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620725 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_38.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620723 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_39.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620722 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_40.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620721 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_41.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620720 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_42.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620555 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_43.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620554 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_44.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620553 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_45.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620557 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_46.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620556 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_47.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620376 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_48.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620381 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_49.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620377 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_50.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620557 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_51.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620556 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_52.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620376 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_53.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620381 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_54.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620377 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_55.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620380 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_56.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620379 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_57.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620378 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_58.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620229 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_59.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620230 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_60.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620228 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_61.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620227 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_62.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620226 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_63.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620225 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_64.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620119 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_65.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620123 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_66.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620120 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_67.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5620122 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_68.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5622671 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2021/datos_2021_69.txt

###2022

library(rvest)
library(stringr)

# Lista de URLs que deseas scrapear
urls <- c( "https://sidof.segob.gob.mx/notas/docFuente/5668034","https://sidof.segob.gob.mx/notas/docFuente/5676170",
"https://sidof.segob.gob.mx/notas/docFuente/5675906",
"https://sidof.segob.gob.mx/notas/docFuente/5673166",
"https://sidof.segob.gob.mx/notas/docFuente/5672648",
"https://sidof.segob.gob.mx/notas/docFuente/5667301",
"https://sidof.segob.gob.mx/notas/docFuente/5664666",
"https://sidof.segob.gob.mx/notas/docFuente/5657708",
"https://sidof.segob.gob.mx/notas/docFuente/5651686",
"https://sidof.segob.gob.mx/notas/docFuente/5641024",
"https://sidof.segob.gob.mx/notas/docFuente/5640415"
)


# Bucle para recorrer las URLs
contador22 <- 61
carpeta <- "/Users/abby/Documents/5to/CD II/Reto/Gob/2022"  

for (url in urls) {
  # Aplicar la función a cada URL
  datos <- extract_text(url)
  
  # Guardar los datos en un archivo de texto
  nombre_archivo <- file.path(carpeta, paste0("datos_2022_", contador22, ".txt"))# Nombre del archivo basado en el número en la URL
  writeLines(datos, nombre_archivo)
  contador22 <<- contador22 + 1

  cat("Datos de", url, "guardados en", nombre_archivo, "\n")
}
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5668034 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2022/datos_2022_61.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5676170 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2022/datos_2022_62.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5675906 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2022/datos_2022_63.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5673166 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2022/datos_2022_64.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5672648 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2022/datos_2022_65.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5667301 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2022/datos_2022_66.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5664666 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2022/datos_2022_67.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5657708 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2022/datos_2022_68.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5651686 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2022/datos_2022_69.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5641024 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2022/datos_2022_70.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5640415 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2022/datos_2022_71.txt

###2023

library(rvest)
library(stringr)

# Lista de URLs que deseas scrapear
urls <- c(  "https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/cnbv/articulos/inclusion-financiera-de-las-personas-con-discapacidad&sa=U&ved=2ahUKEwj2xNvXmKiCAxWWoWoFHSVfDfsQFnoECAcQAg&usg=AOvVaw3-njAWRpp5-zAOGcRqDvgj",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/conadis/es/articulos/dia-nacional-de-las-mujeres-con-discapacidad&sa=U&ved=2ahUKEwio1cCsmqiCAxVClmoFHWwNCYI4ChAWegQIAxAC&usg=AOvVaw341_FGNyyq6rzXxBw63nL1",
"https://www.gob.mx/tramites/ficha/pasaporte-ordinario-para-menores-de-edad-o-persona-con-discapacidad-mayor-de-edad-que-no-pueda-manifestar-su-voluntad-sin-presencia-del-tutor/SRE149",
"https://www.gob.mx/bienestar/prensa/san-luis-potosi-del-7-al-30-de-junio-registro-a-la-pension-universal-de-las-personas-con-discapacidad?idiom=es",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/conadis/articulos/listado-de-instituciones-de-atencion-a-personas-con-discapacidad-de-las-entidades-federativas-de-la-republica-mexicana&sa=U&ved=2ahUKEwjgrOr1mqiCAxU2lGoFHUXTA_A4FBAWegQIARAC&usg=AOvVaw0qXyr8HOU3tNYQqhCOFgsQ",
"https://www.gob.mx/conadis/que-hacemos",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/bienestar/prensa/secretaria-de-bienestar-y-gobierno-de-veracruz-concretan-universalidad-de-la-pension-para-el-bienestar-de-las-personas-con-discapacidad%3Fidiom%3Des&sa=U&ved=2ahUKEwif-Y2hm6iCAxX2kmoFHcZ3AOw4HhAWegQIABAC&usg=AOvVaw0vrRtevBD6iW1GS0_33rWc",
"https://www.gob.mx/tramites/ficha/pasaporte-para-mexicanos-mayores-de-sesenta-anos-y-personas-con-discapacidad-comprobada-con-vigencia-de-seis-tres-o-un-ano-expedido-en-las-oficinas-consulares-de-mexico-en-el-exterior/SRE573",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/bienestar/prensa/pension-para-bienestar-de-las-personas-con-discapacidad-sera-universal-en-san-luis-potosi-ariadna-montiel-y-ricardo-gallardo%3Fidiom%3Des&sa=U&ved=2ahUKEwjlsPbbm6iCAxW-lGoFHU06B9w4KBAWegQIABAC&usg=AOvVaw0_VADoT1sUPviwGF5WZghJ",
"https://www.gob.mx/pensionpersonascondiscapacidad",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/bienestar/prensa/en-veracruz-la-pension-para-el-bienestar-de-personas-con-discapacidad-ya-es-universal%3Fidiom%3Des&sa=U&ved=2ahUKEwjlsPbbm6iCAxW-lGoFHU06B9w4KBAWegQIARAC&usg=AOvVaw3eI1fA9mcK0yIOu-MqRYuf",
"https://www.gob.mx/bienestar/prensa/tamaulipas-del-7-al-30-de-junio-registro-a-la-pension-universal-de-las-personas-con-discapacidad?idiom=es",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/bienestar/prensa/del-2-al-31-de-octubre-registro-a-pension-universal-de-las-personas-con-discapacidad-en-estado-de-mexico%3Fidiom%3Des&sa=U&ved=2ahUKEwj906uznaiCAxVUlmoFHZAbCd44RhAWegQIABAC&usg=AOvVaw2BE8Jn9PMYXAnqIqY7SsiE",
"https://www.gob.mx/tramites/ficha/renovacion-de-pasaporte-ordinario-para-menores-de-edad-o-persona-con-discapacidad-mayor-de-edad-que-no-pueda-manifestar-su-voluntad-con-presencia-del-tutor/SRE150",
"https://www.gob.mx/bienestar/prensa/pension-para-personas-con-discapacidad-aumenta-a-dos-mil-950-pesos-bimestrales-ariadna-montiel?idiom=es",
"https://www.gob.mx/bienestar/prensa/quintana-roo-del-7-al-30-de-junio-registro-a-la-pension-universal-de-las-personas-con-discapacidad?idiom=es",
"https://www.gob.mx/bienestar/prensa/veracruz-del-26-de-junio-al-26-de-julio-registro-a-la-pension-universal-de-personas-con-discapacidad?idiom=es",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/segob/prensa/lenguaje-incluyente-genera-equidad-y-garantiza-derechos-de-ninas-ninos-y-adolescentes%3Fidiom%3Des&sa=U&ved=2ahUKEwjAtLrVnqiCAxUIlGoFHZv4BkcQFnoECAcQAg&usg=AOvVaw34ryYJyIF0QwoeLzEg7BlD",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/presidencia/es/articulos/version-estenografica-conferencia-de-prensa-del-presidente-andres-manuel-lopez-obrador-del-30-de-octubre-de-2023&sa=U&ved=2ahUKEwjAps7Kn6iCAxVPoWoFHYFnAwk4ChAWegQICRAB&usg=AOvVaw2_W1-o7gdAWElWENZknJMx",
"https://www.gob.mx/tramites/ficha/renovacion-de-licencia-de-conducir/Entidades5568",
"https://www.gob.mx/tramites/ficha/matricula-consular-de-alta-seguridad-para-menores-de-edad-y-discapacitados-ante-la-sre/SRE1208",
"https://www.gob.mx/cultura/prensa/vuelven-las-funciones-relajadas-del-inbal-con-el-programa-intervenciones-emergentes",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/cultura/prensa/estudiantado-de-danza-clasica-y-contemporanea-realiza-practicas-escenicas-en-el-foro-cultural-coyoacanense%3Fidiom%3Des-MX&sa=U&ved=2ahUKEwi157qxo6iCAxWIlGoFHSKrDb04HhAWegQIBRAC&usg=AOvVaw3YAmz2hXA9TS7OoF-2eKYK",
"https://www.gob.mx/condusef/prensa/a-partir-de-este-2-de-mayo-la-condusef-atiende-nuevamente-en-sus-oficinas-sin-necesidad-de-agendar-una-cita?idiom=es",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/salud/articulos/dia-mundial-de-la-rehabilitacion-motriz&sa=U&ved=2ahUKEwjWu8vkpKiCAxUNlGoFHSu4B7w4UBAWegQIAxAC&usg=AOvVaw3695BcdFGPu1P82gN1Jx1Y",
"https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/cms/uploads/attachment/file/828751/MARINA_COMUNICADO_RN-6_015_CARRERA.pdf&sa=U&ved=2ahUKEwiqs_P7pKiCAxVdkmoFHZ3WDSs4WhAWegQICRAC&usg=AOvVaw1wy5qtrv9gkvuiCHK6S3fJ", "https://sidof.segob.gob.mx/notas/docFuente/5702241",
"https://sidof.segob.gob.mx/notas/docFuente/5702238",
"https://sidof.segob.gob.mx/notas/docFuente/5702239",
"https://sidof.segob.gob.mx/notas/docFuente/5702240",
"https://sidof.segob.gob.mx/notas/docFuente/5702103",
"https://sidof.segob.gob.mx/notas/docFuente/5702104",
"https://sidof.segob.gob.mx/notas/docFuente/5702102",
"https://sidof.segob.gob.mx/notas/docFuente/5702101",
"https://sidof.segob.gob.mx/notas/docFuente/5702023",
"https://sidof.segob.gob.mx/notas/docFuente/5702022",
"https://sidof.segob.gob.mx/notas/docFuente/5702021",
"https://sidof.segob.gob.mx/notas/docFuente/5702020",
"https://sidof.segob.gob.mx/notas/docFuente/5702019",
"https://sidof.segob.gob.mx/notas/docFuente/5701861",
"https://sidof.segob.gob.mx/notas/docFuente/5701860",
"https://sidof.segob.gob.mx/notas/docFuente/5701859",
"https://sidof.segob.gob.mx/notas/docFuente/5701863",
"https://sidof.segob.gob.mx/notas/docFuente/5701862",
"https://sidof.segob.gob.mx/notas/docFuente/5701748",
"https://sidof.segob.gob.mx/notas/docFuente/5701744",
"https://sidof.segob.gob.mx/notas/docFuente/5701745",
"https://sidof.segob.gob.mx/notas/docFuente/5701746",
"https://sidof.segob.gob.mx/notas/docFuente/5701747",
"https://sidof.segob.gob.mx/notas/docFuente/5701526",
"https://sidof.segob.gob.mx/notas/docFuente/5701522",
"https://sidof.segob.gob.mx/notas/docFuente/5701523",
"https://sidof.segob.gob.mx/notas/docFuente/5701524",
"https://sidof.segob.gob.mx/notas/docFuente/5701525",
"https://sidof.segob.gob.mx/notas/docFuente/5701380",
"https://sidof.segob.gob.mx/notas/docFuente/5701376",
"https://sidof.segob.gob.mx/notas/docFuente/5701379",
"https://sidof.segob.gob.mx/notas/docFuente/5701378",
"https://sidof.segob.gob.mx/notas/docFuente/5701377",
"https://sidof.segob.gob.mx/notas/docFuente/5689657",
"https://sidof.segob.gob.mx/notas/docFuente/5689454",
"https://sidof.segob.gob.mx/notas/docFuente/5685490",
"https://sidof.segob.gob.mx/notas/docFuente/5676505",
"https://sidof.segob.gob.mx/notas/docFuente/5695645",
"https://sidof.segob.gob.mx/notas/docFuente/5699645",
"https://sidof.segob.gob.mx/notas/docFuente/5695838",
"https://sidof.segob.gob.mx/notas/docFuente/5682911",
"https://sidof.segob.gob.mx/notas/docFuente/5677575",
"https://sidof.segob.gob.mx/notas/docFuente/5707442"
)


# Bucle para recorrer las URLs
contador23 <- 1
carpeta <- "/Users/abby/Documents/5to/CD II/Reto/Gob/2023"  

for (url in urls) {
  # Aplicar la función a cada URL
  datos <- extract_text(url)
  
  # Guardar los datos en un archivo de texto
  nombre_archivo <- file.path(carpeta, paste0("datos_2023_", contador23, ".txt"))# Nombre del archivo basado en el número en la URL
  writeLines(datos, nombre_archivo)
  contador23 <<- contador23 + 1

  cat("Datos de", url, "guardados en", nombre_archivo, "\n")
}
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/cnbv/articulos/inclusion-financiera-de-las-personas-con-discapacidad&sa=U&ved=2ahUKEwj2xNvXmKiCAxWWoWoFHSVfDfsQFnoECAcQAg&usg=AOvVaw3-njAWRpp5-zAOGcRqDvgj guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_1.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/conadis/es/articulos/dia-nacional-de-las-mujeres-con-discapacidad&sa=U&ved=2ahUKEwio1cCsmqiCAxVClmoFHWwNCYI4ChAWegQIAxAC&usg=AOvVaw341_FGNyyq6rzXxBw63nL1 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_2.txt 
## Datos de https://www.gob.mx/tramites/ficha/pasaporte-ordinario-para-menores-de-edad-o-persona-con-discapacidad-mayor-de-edad-que-no-pueda-manifestar-su-voluntad-sin-presencia-del-tutor/SRE149 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_3.txt 
## Datos de https://www.gob.mx/bienestar/prensa/san-luis-potosi-del-7-al-30-de-junio-registro-a-la-pension-universal-de-las-personas-con-discapacidad?idiom=es guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_4.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/conadis/articulos/listado-de-instituciones-de-atencion-a-personas-con-discapacidad-de-las-entidades-federativas-de-la-republica-mexicana&sa=U&ved=2ahUKEwjgrOr1mqiCAxU2lGoFHUXTA_A4FBAWegQIARAC&usg=AOvVaw0qXyr8HOU3tNYQqhCOFgsQ guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_5.txt 
## Datos de https://www.gob.mx/conadis/que-hacemos guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_6.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/bienestar/prensa/secretaria-de-bienestar-y-gobierno-de-veracruz-concretan-universalidad-de-la-pension-para-el-bienestar-de-las-personas-con-discapacidad%3Fidiom%3Des&sa=U&ved=2ahUKEwif-Y2hm6iCAxX2kmoFHcZ3AOw4HhAWegQIABAC&usg=AOvVaw0vrRtevBD6iW1GS0_33rWc guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_7.txt 
## Datos de https://www.gob.mx/tramites/ficha/pasaporte-para-mexicanos-mayores-de-sesenta-anos-y-personas-con-discapacidad-comprobada-con-vigencia-de-seis-tres-o-un-ano-expedido-en-las-oficinas-consulares-de-mexico-en-el-exterior/SRE573 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_8.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/bienestar/prensa/pension-para-bienestar-de-las-personas-con-discapacidad-sera-universal-en-san-luis-potosi-ariadna-montiel-y-ricardo-gallardo%3Fidiom%3Des&sa=U&ved=2ahUKEwjlsPbbm6iCAxW-lGoFHU06B9w4KBAWegQIABAC&usg=AOvVaw0_VADoT1sUPviwGF5WZghJ guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_9.txt 
## Datos de https://www.gob.mx/pensionpersonascondiscapacidad guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_10.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/bienestar/prensa/en-veracruz-la-pension-para-el-bienestar-de-personas-con-discapacidad-ya-es-universal%3Fidiom%3Des&sa=U&ved=2ahUKEwjlsPbbm6iCAxW-lGoFHU06B9w4KBAWegQIARAC&usg=AOvVaw3eI1fA9mcK0yIOu-MqRYuf guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_11.txt 
## Datos de https://www.gob.mx/bienestar/prensa/tamaulipas-del-7-al-30-de-junio-registro-a-la-pension-universal-de-las-personas-con-discapacidad?idiom=es guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_12.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/bienestar/prensa/del-2-al-31-de-octubre-registro-a-pension-universal-de-las-personas-con-discapacidad-en-estado-de-mexico%3Fidiom%3Des&sa=U&ved=2ahUKEwj906uznaiCAxVUlmoFHZAbCd44RhAWegQIABAC&usg=AOvVaw2BE8Jn9PMYXAnqIqY7SsiE guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_13.txt 
## Datos de https://www.gob.mx/tramites/ficha/renovacion-de-pasaporte-ordinario-para-menores-de-edad-o-persona-con-discapacidad-mayor-de-edad-que-no-pueda-manifestar-su-voluntad-con-presencia-del-tutor/SRE150 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_14.txt 
## Datos de https://www.gob.mx/bienestar/prensa/pension-para-personas-con-discapacidad-aumenta-a-dos-mil-950-pesos-bimestrales-ariadna-montiel?idiom=es guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_15.txt 
## Datos de https://www.gob.mx/bienestar/prensa/quintana-roo-del-7-al-30-de-junio-registro-a-la-pension-universal-de-las-personas-con-discapacidad?idiom=es guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_16.txt 
## Datos de https://www.gob.mx/bienestar/prensa/veracruz-del-26-de-junio-al-26-de-julio-registro-a-la-pension-universal-de-personas-con-discapacidad?idiom=es guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_17.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/segob/prensa/lenguaje-incluyente-genera-equidad-y-garantiza-derechos-de-ninas-ninos-y-adolescentes%3Fidiom%3Des&sa=U&ved=2ahUKEwjAtLrVnqiCAxUIlGoFHZv4BkcQFnoECAcQAg&usg=AOvVaw34ryYJyIF0QwoeLzEg7BlD guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_18.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/presidencia/es/articulos/version-estenografica-conferencia-de-prensa-del-presidente-andres-manuel-lopez-obrador-del-30-de-octubre-de-2023&sa=U&ved=2ahUKEwjAps7Kn6iCAxVPoWoFHYFnAwk4ChAWegQICRAB&usg=AOvVaw2_W1-o7gdAWElWENZknJMx guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_19.txt 
## Datos de https://www.gob.mx/tramites/ficha/renovacion-de-licencia-de-conducir/Entidades5568 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_20.txt 
## Datos de https://www.gob.mx/tramites/ficha/matricula-consular-de-alta-seguridad-para-menores-de-edad-y-discapacitados-ante-la-sre/SRE1208 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_21.txt 
## Datos de https://www.gob.mx/cultura/prensa/vuelven-las-funciones-relajadas-del-inbal-con-el-programa-intervenciones-emergentes guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_22.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/cultura/prensa/estudiantado-de-danza-clasica-y-contemporanea-realiza-practicas-escenicas-en-el-foro-cultural-coyoacanense%3Fidiom%3Des-MX&sa=U&ved=2ahUKEwi157qxo6iCAxWIlGoFHSKrDb04HhAWegQIBRAC&usg=AOvVaw3YAmz2hXA9TS7OoF-2eKYK guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_23.txt 
## Datos de https://www.gob.mx/condusef/prensa/a-partir-de-este-2-de-mayo-la-condusef-atiende-nuevamente-en-sus-oficinas-sin-necesidad-de-agendar-una-cita?idiom=es guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_24.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/salud/articulos/dia-mundial-de-la-rehabilitacion-motriz&sa=U&ved=2ahUKEwjWu8vkpKiCAxUNlGoFHSu4B7w4UBAWegQIAxAC&usg=AOvVaw3695BcdFGPu1P82gN1Jx1Y guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_25.txt 
## Datos de https://www.google.com/url?client=internal-element-cse&cx=001009928181730403690:azhagrfyx8s&q=https://www.gob.mx/cms/uploads/attachment/file/828751/MARINA_COMUNICADO_RN-6_015_CARRERA.pdf&sa=U&ved=2ahUKEwiqs_P7pKiCAxVdkmoFHZ3WDSs4WhAWegQICRAC&usg=AOvVaw1wy5qtrv9gkvuiCHK6S3fJ guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_26.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702241 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_27.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702238 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_28.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702239 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_29.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702240 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_30.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702103 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_31.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702104 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_32.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702102 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_33.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702101 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_34.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702023 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_35.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702022 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_36.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702021 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_37.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702020 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_38.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5702019 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_39.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701861 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_40.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701860 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_41.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701859 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_42.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701863 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_43.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701862 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_44.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701748 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_45.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701744 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_46.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701745 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_47.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701746 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_48.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701747 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_49.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701526 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_50.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701522 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_51.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701523 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_52.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701524 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_53.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701525 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_54.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701380 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_55.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701376 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_56.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701379 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_57.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701378 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_58.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5701377 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_59.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5689657 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_60.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5689454 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_61.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5685490 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_62.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5676505 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_63.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5695645 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_64.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5699645 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_65.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5695838 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_66.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5682911 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_67.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5677575 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_68.txt 
## Datos de https://sidof.segob.gob.mx/notas/docFuente/5707442 guardados en /Users/abby/Documents/5to/CD II/Reto/Gob/2023/datos_2023_69.txt

##Limpieza Este código una serie de operaciones para limpiar archivos de texto en español ubicados en la carpeta “/Users/abby/Documents/5to/CD II/Gob/2023”. Inicialmente, se obtiene una lista de todos los archivos en esa carpeta. Luego, se utiliza la biblioteca tm para procesar y limpiar el texto. En un bucle, cada archivo se lee, convierte a minúsculas, elimina saltos de línea, puntuación y palabras vacías (stopwords) en español. El texto limpio se escribe de nuevo en archivos con el prefijo ‘limpio_’. Este proceso de limpieza es común en análisis de texto para preparar datos para análisis de texto o minería de texto.

file_list <- list.files(path = "/Users/abby/Documents/5to/CD II/Reto/Gob")

# Carga las bibliotecas necesarias
library(tm)
## Loading required package: NLP
library(SnowballC)
library(NLP)

# Define la ruta de la carpeta
ruta_carpeta <- "/Users/abby/Documents/5to/CD II/Reto/Gob"

# Obtiene la lista de archivos .txt en la carpeta
archivos <- list.files(path = ruta_carpeta, pattern = "*.txt")

# Loop para leer y limpiar cada archivo
for (archivo in archivos) {
  # Lee el archivo
  texto <- readLines(paste0(ruta_carpeta, "/", archivo), encoding = "UTF-8")
  # Convierte a UTF-8
  texto <- iconv(texto, "latin1", "UTF-8")
  # Convierte a minúsculas
  texto <- tolower(texto)
  
  # Elimina los saltos de línea
  texto <- gsub("\n", " ", texto)
  
  # Elimina la puntuación
  texto <- removePunctuation(texto)
  
  # Elimina las palabras vacías
  texto <- removeWords(texto, stopwords("spanish"))
  
  # Escribe el texto limpio de nuevo al archivo
  writeLines(texto, paste0(ruta_carpeta, "/limpio_", archivo))
}

##Vectorización Este código realiza una serie de operaciones para cada año desde 2019 hasta 2023, con el propósito de leer y vectorizar el contenido de archivos de texto almacenados en diferentes carpetas correspondientes a cada año. Cada sección del código sigue una estructura similar: - Configuración de la Carpeta: Se especifica la ruta de la carpeta correspondiente a un año en particular (por ejemplo, “/Users/abby/Documents/5to/CD II/Reto/Gob/2019” para 2019).

Se construye la ruta completa del archivo.Se lee el contenido del archivo de texto utilizando readLines. Se vectoriza el texto mediante la concatenación del contenido en el vector texto_vectorizadoXX.

#2019
ruta_carpeta <- "/Users/abby/Documents/5to/CD II/Reto/Gob/2019"


# Lista de archivos en la carpeta que coinciden con el patrón
archivos19 <- list.files(path = ruta_carpeta)

# Inicializa un vector para almacenar el texto de los archivos
texto_vectorizado19 <- character(length(archivos19))

# Loop para leer y vectorizar el texto de cada archivo
for (i in 1:length(archivos19)) {
  # Ruta completa del archivo
  ruta_archivo <- file.path(ruta_carpeta, archivos19[i])
  
  # Lee el archivo de texto
  texto <- readLines(ruta_archivo)
  
  # Vectoriza el texto 
  texto_vectorizado19[i] <- paste(texto, collapse = " ")
}



#2020
ruta_carpeta <- "/Users/abby/Documents/5to/CD II/Reto/Gob/2020"

# Lista de archivos en la carpeta que coinciden con el patrón
archivos20 <- list.files(path = ruta_carpeta)

# Inicializa un vector para almacenar el texto de los archivos
texto_vectorizado20 <- character(length(archivos20))

# Loop para leer y vectorizar el texto de cada archivo
for (i in 1:length(archivos20)) {
  # Ruta completa del archivo
  ruta_archivo <- file.path(ruta_carpeta, archivos20[i])
  
  # Lee el archivo de texto
  texto <- readLines(ruta_archivo)
  
  # Vectoriza el texto 
  texto_vectorizado20[i] <- paste(texto, collapse = " ")
}


#2021
ruta_carpeta <- "/Users/abby/Documents/5to/CD II/Reto/Gob/2021"

# Lista de archivos en la carpeta que coinciden con el patrón
archivos21 <- list.files(path = ruta_carpeta)

# Inicializa un vector para almacenar el texto de los archivos
texto_vectorizado21 <- character(length(archivos21))

# Loop para leer y vectorizar el texto de cada archivo
for (i in 1:length(archivos21)) {
  # Ruta completa del archivo
  ruta_archivo <- file.path(ruta_carpeta, archivos21[i])
  
  # Lee el archivo de texto
  texto <- readLines(ruta_archivo)
  
  # Vectoriza el texto
  texto_vectorizado21[i] <- paste(texto, collapse = " ")
}

#2022
ruta_carpeta <- "/Users/abby/Documents/5to/CD II/Reto/Gob/2022"

# Lista de archivos en la carpeta que coinciden con el patrón
archivos22 <- list.files(path = ruta_carpeta)

# Inicializa un vector para almacenar el texto de los archivos
texto_vectorizado22 <- character(length(archivos22))

# Loop para leer y vectorizar el texto de cada archivo
for (i in 1:length(archivos22)) {
  # Ruta completa del archivo
  ruta_archivo <- file.path(ruta_carpeta, archivos22[i])
  
  # Lee el archivo de texto
  texto <- readLines(ruta_archivo)
  
  # Vectoriza el texto 
  texto_vectorizado22[i] <- paste(texto, collapse = " ")
}

#2023
ruta_carpeta <- "/Users/abby/Documents/5to/CD II/Reto/Gob/2023"

# Lista de archivos en la carpeta que coinciden con el patrón
archivos23 <- list.files(path = ruta_carpeta)

# Inicializa un vector para almacenar el texto de los archivos
texto_vectorizado23 <- character(length(archivos23))

# Loop para leer y vectorizar el texto de cada archivo
for (i in 1:length(archivos23)) {
  # Ruta completa del archivo
  ruta_archivo <- file.path(ruta_carpeta, archivos23[i])
  
  # Lee el archivo de texto
  texto <- readLines(ruta_archivo)
  
  # Vectoriza el texto 
  texto_vectorizado23[i] <- paste(texto, collapse = " ")
}

##2019 ###Corpus y Nube Este código realiza un análisis de texto sobre los comentarios vectorizados correspondientes al año 2019. Primero, crea un corpus utilizando la función Corpus de la biblioteca tm a partir del vector texto_vectorizado19. Luego, genera una matriz término-documento (DTM) utilizando DocumentTermMatrix para contar la frecuencia de cada término en los comentarios. Posteriormente, calcula el conteo total de términos y los ordena de manera descendente. El código identifica y muestra los 25 términos más comunes en los comentarios del año 2019. Luego, utiliza el paquete wordcloud2 para visualizar estos términos comunes en una nube de palabras, asignando colores específicos a una lista predefinida de palabras relacionadas con discapacidades. Finalmente, guarda la nube de palabras como un archivo HTML y la convierte a una imagen PNG utilizando la función webshot, guardando la imagen en una carpeta especificada. En resumen, este código ofrece un análisis visual de los términos más frecuentes en los comentarios de 2019, con un enfoque especial en palabras relacionadas con discapacidades.

library(tm)
library(NLP)
corpus19 <- Corpus(VectorSource(texto_vectorizado19))
# Creación DTM
dtm19 <- DocumentTermMatrix(corpus19)
#Conteo
conteo_total <- colSums(as.matrix(dtm19))
#Ordenar y mostrar los términos comúnes
terminos_comunes19<- sort(conteo_total, decreasing = TRUE)
#Identificación 25 términos más comúnes
head(terminos_comunes19, 25)
##        a.c.         del         que         los        para asistencial 
##       20856        6680        6671        6547        5919        5531 
##         las   fundación         con         por      i.a.p.      centro 
##        5149        4648        4109        3613        2794        1925 
##  desarrollo        como    nacional  asociación     méxico,         una 
##        1832        1416        1409        1346        1260        1217 
##    personas    cultural         dif    artículo    presente      social 
##        1204        1110        1090        1065        1032        1017 
##      estado 
##        1015
# Carga el paquete wordcloud2
library(wordcloud2)
library(htmlwidgets)

# Define una lista de palabras
lista_palabras <- c("discapacidad", "discapacitado", "minusvalido", "diferentes", "enfermito", "capacidades")
palabras_eliminar <- c("milenio", "grupo")
corpus19 <- tm_map(corpus19, removeWords, palabras_eliminar)
## Warning in tm_map.SimpleCorpus(corpus19, removeWords, palabras_eliminar):
## transformation drops documents
# Define los colores para las palabras
colores <- ifelse(names(terminos_comunes19) %in% lista_palabras, "blue", "black")

# Crea la nube de palabras
nube <- wordcloud2(data.frame(word = names(terminos_comunes19), freq = terminos_comunes19),
           color = colores, minSize = 2, size = 0.6)
nube
saveWidget(nube, file="nube.html", selfcontained = F)
nube
ruta_carpeta <- "/Users/abby/Documents/5to/CD II/Reto/nubes"

# Convierte el archivo HTML a PNG con webshot y lo guarda en la carpeta especificada
webshot::webshot("nube.html", file = paste0(ruta_carpeta, "/nube.png"))

###Análisis de sentimientos Este código realiza un análisis de sentimientos sobre los comentarios procesados del año 2019. Comienza cargando varias bibliotecas necesarias para el análisis, incluyendo syuzhet, RColorBrewer, wordcloud, y tm. A continuación, tokeniza el corpus de comentarios, convierte el texto a minúsculas, elimina puntuación, números y palabras vacías en español. Luego, se obtiene un vector de palabras y se realiza un análisis de sentimientos utilizando el paquete syuzhet, generando una tabla que muestra la cantidad de palabras asociadas a diferentes emociones. A través de gráficos de barras, identifica las palabras más frecuentes asociadas con sentimientos de tristeza, felicidad, enfado, confianza, miedo y disgusto. Posteriormente, crea una nube de palabras para visualizar las emociones presentes en los comentarios. También realiza un análisis de sentimientos con el paquete afinn, clasificando las palabras en positivas o negativas y representando los resultados con una gráfica de barras apilada. Este código proporciona una visión completa de los sentimientos expresados en los comentarios del año 2019, permitiendo una comprensión más profunda de la tonalidad emocional presente en el conjunto de datos.

# Carga los paquetes
library(syuzhet)
library(RColorBrewer)
library(wordcloud)
library(tm)

# Tokenización en el corpus
corpus_tokenizado <- tm_map(corpus19, content_transformer(tolower))
## Warning in tm_map.SimpleCorpus(corpus19, content_transformer(tolower)):
## transformation drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removePunctuation)
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removePunctuation):
## transformation drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removeNumbers)
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removeNumbers): transformation
## drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removeWords, stopwords("spanish"))
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removeWords,
## stopwords("spanish")): transformation drops documents
# Obtención del texto tokenizado como un vector
texto_palabras <- sapply(corpus_tokenizado, function(x) unlist(strsplit(as.character(x), " ")))

# Convertir a una lista
texto_palabras <- unlist(texto_palabras)

# Eliminar elementos vacíos
texto_palabras <- texto_palabras[texto_palabras != ""]

# Análisis de sentimientos
sentimientos_df <- get_nrc_sentiment(texto_vectorizado19, lang = "spanish")
head(sentimientos_df)
##   anger anticipation disgust fear joy sadness surprise trust negative positive
## 1     2            8       2    4   4       3        4    17        9       27
## 2     6            7       4    7   4       8        4    18       12       28
## 3     0           18       3    6  12       6        7    26       14       38
## 4     2            6       2    3   4       5        1    17        9       22
## 5     6            9       4    7   6       8        5    21       13       33
## 6     6            7       4    7   4       8        4    17       12       28
# Gráfica de barras sentimientos
barplot(
  colSums(prop.table(sentimientos_df[, 1:8])),
  space = 0.2,
  horiz = FALSE,
  las = 1,
  cex.names = 0.7,
  col = brewer.pal(n = 8, name = "Set3"),
  main = "Gobierno, 2019",
  xlab = "emociones", ylab = NULL
)

palabras_trust <- texto_palabras[sentimientos_df$trust> 0]
palabras_trust_orden <- sort(table(unlist(palabras_trust)), decreasing = TRUE)
head(palabras_trust_orden, n = 12)
## 
##          ac asistencial   fundación         iap      centro  desarrollo 
##       21012        5539        4696        2848        1967        1935 
##      social      méxico    nacional  asociación         dif    personas 
##        1861        1745        1681        1346        1283        1265
palabras_tristeza <- texto_palabras[sentimientos_df$sadness> 0]
palabras_tristeza_orden <- sort(table(unlist(palabras_tristeza)), decreasing = TRUE)
head(palabras_tristeza_orden, n = 12)
## 
##          ac asistencial   fundación         iap      centro  desarrollo 
##       20380        5383        4570        2761        1906        1856 
##      social      méxico    nacional  asociación         dif    personas 
##        1805        1690        1640        1309        1249        1222
#El diccionario lee discapacidad como una palabra triste

#Analisis de sentimientos con Afinn: Positivo/negativo
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.1     ✔ purrr   1.0.1
## ✔ tibble  3.2.1     ✔ dplyr   1.1.4
## ✔ tidyr   1.3.0     ✔ forcats 0.5.2
## ✔ readr   2.1.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ ggplot2::annotate()     masks NLP::annotate()
## ✖ dplyr::filter()         masks stats::filter()
## ✖ readr::guess_encoding() masks rvest::guess_encoding()
## ✖ dplyr::lag()            masks stats::lag()

library(tidytext)
library(tm)
library(lubridate)
## 
## Attaching package: 'lubridate'
## 
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(zoo)
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(scales)
## 
## Attaching package: 'scales'
## 
## The following object is masked from 'package:purrr':
## 
##     discard
## 
## The following object is masked from 'package:readr':
## 
##     col_factor
## 
## The following object is masked from 'package:syuzhet':
## 
##     rescale
afinn <- read.csv("lexico_afinn.en.es.csv", stringsAsFactors = F, fileEncoding = "latin1") %>% 
  tibble::as_tibble()

texto_vectorizado19df <- as.data.frame(texto_vectorizado19)

texto_afinn <- 
  texto_vectorizado19df %>%
  unnest_tokens(input = "texto_vectorizado19", output = "Palabra") %>%
  inner_join(afinn, ., by = "Palabra") %>%
  mutate(Tipo = ifelse(Puntuacion > 0, "Positiva", "Negativa"))
## Warning in inner_join(afinn, ., by = "Palabra"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 3 of `x` matches multiple rows in `y`.
## ℹ Row 7938 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
##   "many-to-many"` to silence this warning.
tema_graf <-
  theme_minimal() +
  theme(text = element_text(family = "serif"),
        panel.grid.minor = element_blank(),
        strip.background = element_rect(fill = "#EBEBEB", colour = NA),
        legend.position = "none",
        legend.box.background = element_rect(fill = "#EBEBEB", colour = NA))

# Cuenta la cantidad de palabras positivas y negativas
conteo_sentimientos <- texto_afinn %>%
  group_by(Tipo) %>%
  summarise(n = n(), .groups = "keep")

conteo_sentimientos$dummy <- "sentimientos"

# Crea la gráfica de barras apilada
grafica_sentimientos <- ggplot(conteo_sentimientos, aes(x = dummy, y = n, fill = Tipo)) +
  geom_bar(stat = "identity") +
  labs(x = "Tipo de sentimiento", y = "Cantidad de palabras", title = "Análisis de sentimientos, Noticias 2019") +
  tema_graf +
  scale_fill_manual(values = c("firebrick3", "green"))

# Muestra la gráfica
print(grafica_sentimientos)

####Se replican los mismos pasos utilizados para los datos del 2019 a los datos del 2020, 2021, 2022, y 2023.

##2020 ###Corpus y nube

# Carga el paquete wordcloud2
library(wordcloud2)
library(htmlwidgets)
library(tm)
library(NLP)

# Remover caracteres especiales
texto_vectorizado20 <- iconv(texto_vectorizado20, to = "UTF-8-MAC", sub = " ")

# Crear el corpus y la matriz de términos del documento
corpus20 <- Corpus(VectorSource(texto_vectorizado20))
# Si tienes problemas con la codificación, también puedes intentar especificar la codificación aquí
# corpus20 <- Corpus(VectorSource(texto_vectorizado20, readerControl = list(language = "en", readerOptions = list(encoding = "UTF-8"))))

# Creación DTM
dtm20 <- DocumentTermMatrix(corpus20)
#Conteo
conteo_total <- colSums(as.matrix(dtm20))
#Ordenar y mostrar los términos comúnes
terminos_comunes20 <- sort(conteo_total, decreasing = TRUE)

# Define una lista de palabras
lista_palabras <- c("discapacidad", "discapacitado", "minusvalido", "diferentes", "enfermito", "capacidades")


# Define los colores para las palabras
colores <- ifelse(names(terminos_comunes20) %in% lista_palabras, "blue", "black")

# Crea la nube de palabras
nube <- wordcloud2(data.frame(word = names(terminos_comunes20), freq = terminos_comunes20),
           color = colores, minSize = 2, size = 0.6)
nube

###Análisis de sentimientos

# Carga los paquetes
library(syuzhet)
library(RColorBrewer)
library(wordcloud)
library(tm)


# Tokenización en el corpus
corpus_tokenizado <- tm_map(corpus20, content_transformer(tolower))
## Warning in tm_map.SimpleCorpus(corpus20, content_transformer(tolower)):
## transformation drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removePunctuation)
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removePunctuation):
## transformation drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removeNumbers)
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removeNumbers): transformation
## drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removeWords, stopwords("spanish"))
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removeWords,
## stopwords("spanish")): transformation drops documents
# Obtención del texto tokenizado como un vector
texto_palabras <- sapply(corpus_tokenizado, function(x) unlist(strsplit(as.character(x), " ")))

# Convertir a una lista
texto_palabras <- unlist(texto_palabras)

# Eliminar elementos vacíos
texto_palabras <- texto_palabras[texto_palabras != ""]

# Análisis de sentimientos
sentimientos_df <- get_nrc_sentiment(texto_vectorizado20, lang = "spanish")
head(sentimientos_df)
##   anger anticipation disgust fear joy sadness surprise trust negative positive
## 1     0            2       0    1   1       1        1     6        2        6
## 2    15           31      12   28  23      32       14    76       58      126
## 3    17           41      11   25  30      28       17    70       56      130
## 4     0            1       1    1   1       1        0     1        1        2
## 5     9           24       8   23  22      29       10    65       43      100
## 6     0            4       0    1   2       2        1     7        5       10
# Gráfica de barras sentimientos
barplot(
  colSums(prop.table(sentimientos_df[, 1:8])),
  space = 0.2,
  horiz = FALSE,
  las = 1,
  cex.names = 0.7,
  col = brewer.pal(n = 8, name = "Set3"),
  main = "Gobierno, 2020",
  xlab = "emociones", ylab = NULL
)

palabras_trust <- texto_palabras[sentimientos_df$trust> 0]
palabras_trust_orden <- sort(table(unlist(palabras_trust)), decreasing = TRUE)
head(palabras_trust_orden, n = 12)
## 
##     programa     personas     nacional      mujeres        salud    secretarí 
##         1143         1110         1052          998          972          907 
##     recursos discapacidad      general     atención          así    bienestar 
##          868          844          687          666          646          626
palabras_tristeza <- texto_palabras[sentimientos_df$sadness> 0]
palabras_tristeza_orden <- sort(table(unlist(palabras_tristeza)), decreasing = TRUE)
head(palabras_tristeza_orden, n = 12)
## 
##     programa     personas     nacional      mujeres        salud    secretarí 
##         1143         1110         1052          998          972          907 
##     recursos discapacidad      general     atención          así    bienestar 
##          868          844          687          666          646          626
palabras_anti <- texto_palabras[sentimientos_df$anticipation> 0]
palabras_anti_orden <- sort(table(unlist(palabras_anti)), decreasing = TRUE)
head(palabras_anti_orden, n = 12)
## 
##     programa     personas     nacional      mujeres        salud    secretarí 
##         1143         1110         1052          998          972          907 
##     recursos discapacidad      general     atención          así    bienestar 
##          868          844          687          666          646          626
#El diccionario lee discapacidad como una palabra triste

#Analisis de sentimientos con Afinn: Positivo/negativo
library(tidyverse)
library(tidytext)
library(tm)
library(lubridate)
library(zoo)
library(scales)

afinn <- read.csv("lexico_afinn.en.es.csv", stringsAsFactors = F, fileEncoding = "latin1") %>% 
  tibble::as_tibble()

texto_vectorizado20df <- as.data.frame(texto_vectorizado20)

texto_afinn <- 
  texto_vectorizado20df %>%
  unnest_tokens(input = "texto_vectorizado20", output = "Palabra") %>%
  inner_join(afinn, ., by = "Palabra") %>%
  mutate(Tipo = ifelse(Puntuacion > 0, "Positiva", "Negativa"))
## Warning in inner_join(afinn, ., by = "Palabra"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 3 of `x` matches multiple rows in `y`.
## ℹ Row 117776 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
##   "many-to-many"` to silence this warning.
tema_graf <-
  theme_minimal() +
  theme(text = element_text(family = "serif"),
        panel.grid.minor = element_blank(),
        strip.background = element_rect(fill = "#EBEBEB", colour = NA),
        legend.position = "none",
        legend.box.background = element_rect(fill = "#EBEBEB", colour = NA))

# Cuenta la cantidad de palabras positivas y negativas
conteo_sentimientos <- texto_afinn %>%
  group_by(Tipo) %>%
  summarise(n = n(), .groups = "keep")

conteo_sentimientos$dummy <- "sentimientos"

# Crea la gráfica de barras apilada
grafica_sentimientos <- ggplot(conteo_sentimientos, aes(x = dummy, y = n, fill = Tipo)) +
  geom_bar(stat = "identity") +
  labs(x = "Tipo de sentimiento", y = "Cantidad de palabras", title = "Análisis de sentimientos, Noticias 2020") +
  tema_graf +
  scale_fill_manual(values = c("firebrick3", "green"))

# Muestra la gráfica
print(grafica_sentimientos)

##2021 ###Corpus y nube

# Carga el paquete wordcloud2
library(wordcloud2)
library(htmlwidgets)
library(tm)
library(NLP)
corpus21 <- Corpus(VectorSource(texto_vectorizado21))
# Creación DTM
dtm21 <- DocumentTermMatrix(corpus21)
#Conteo
conteo_total <- colSums(as.matrix(dtm21))
#Ordenar y mostrar los términos comúnes
terminos_comunes21 <- sort(conteo_total, decreasing = TRUE)

# Define una lista de palabras
lista_palabras <- c("discapacidad", "discapacitado", "minusvalido", "diferentes", "enfermito", "capacidades")


# Define los colores para las palabras
colores <- ifelse(names(terminos_comunes21) %in% lista_palabras, "blue", "black")

# Crea la nube de palabras
nube <- wordcloud2(data.frame(word = names(terminos_comunes21), freq = terminos_comunes21),
           color = colores, minSize = 2, size = 0.6)
nube

###Análisis de sentimientos

# Carga los paquetes
library(syuzhet)
library(RColorBrewer)
library(wordcloud)
library(tm)


# Tokenización en el corpus
corpus_tokenizado <- tm_map(corpus21, content_transformer(tolower))
## Warning in tm_map.SimpleCorpus(corpus21, content_transformer(tolower)):
## transformation drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removePunctuation)
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removePunctuation):
## transformation drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removeNumbers)
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removeNumbers): transformation
## drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removeWords, stopwords("spanish"))
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removeWords,
## stopwords("spanish")): transformation drops documents
# Obtención del texto tokenizado como un vector
texto_palabras <- sapply(corpus_tokenizado, function(x) unlist(strsplit(as.character(x), " ")))

# Convertir a una lista
texto_palabras <- unlist(texto_palabras)

# Eliminar elementos vacíos
texto_palabras <- texto_palabras[texto_palabras != ""]

texto_palabras <- texto_palabras[nchar(texto_palabras) > 2]


# Análisis de sentimientos
sentimientos_df <- get_nrc_sentiment(texto_vectorizado21, lang = "spanish")
head(sentimientos_df)
##   anger anticipation disgust fear joy sadness surprise trust negative positive
## 1     0            2       0    1   2       2        1     8        5        9
## 2    56           75      37   74  44      66       33   157      168      221
## 3    63           93      43   86  77      62       48   198      170      324
## 4    34           66      28   48  48      48       26   140      122      201
## 5    47           71      29   61  49      59       25   170      137      249
## 6    47          100      27   57  67      55       38   205      148      323
# Gráfica de barras sentimientos
barplot(
  colSums(prop.table(sentimientos_df[, 1:8])),
  space = 0.2,
  horiz = FALSE,
  las = 1,
  cex.names = 0.7,
  col = brewer.pal(n = 8, name = "Set3"),
  main = "Gobierno, 2021",
  xlab = "emociones", ylab = NULL
)

palabras_trust <- texto_palabras[sentimientos_df$trust> 0]
palabras_trust_orden <- sort(table(unlist(palabras_trust)), decreasing = TRUE)
head(palabras_trust_orden, n = 12)
## 
##       ley  nacional  artículo       así  personas  presente   general  recursos 
##      4728      3758      3523      3263      3096      3092      3080      3016 
##    social  convenio servicios           
##      2928      2803      2723      2629
palabras_tristeza <- texto_palabras[sentimientos_df$sadness> 0]
palabras_tristeza_orden <- sort(table(unlist(palabras_tristeza)), decreasing = TRUE)
head(palabras_tristeza_orden, n = 12)
## 
##       ley  nacional  artículo       así  personas  presente   general  recursos 
##      4728      3758      3523      3263      3096      3092      3080      3016 
##    social  convenio servicios           
##      2928      2803      2723      2629
palabras_anti <- texto_palabras[sentimientos_df$anticipation> 0]
palabras_anti_orden <- sort(table(unlist(palabras_anti)), decreasing = TRUE)
head(palabras_anti_orden, n = 12)
## 
##       ley  nacional  artículo       así  personas  presente   general  recursos 
##      4728      3758      3523      3263      3096      3092      3080      3016 
##    social  convenio servicios           
##      2928      2803      2723      2629
palabras_miedo <- texto_palabras[sentimientos_df$fear> 0]
palabras_miedo_orden <- sort(table(unlist(palabras_miedo)), decreasing = TRUE)
head(palabras_miedo_orden, n = 12)
## 
##       ley  nacional  artículo       así  personas  presente   general  recursos 
##      4728      3758      3523      3263      3096      3092      3080      3016 
##    social  convenio servicios           
##      2928      2803      2723      2629
#El diccionario lee discapacidad como una palabra triste

#Analisis de sentimientos con Afinn: Positivo/negativo
library(tidyverse)
library(tidytext)
library(tm)
library(lubridate)
library(zoo)
library(scales)

afinn <- read.csv("lexico_afinn.en.es.csv", stringsAsFactors = F, fileEncoding = "latin1") %>% 
  tibble::as_tibble()

texto_vectorizado21df <- as.data.frame(texto_vectorizado21)

texto_afinn <- 
  texto_vectorizado21df %>%
  unnest_tokens(input = "texto_vectorizado21", output = "Palabra") %>%
  inner_join(afinn, ., by = "Palabra") %>%
  mutate(Tipo = ifelse(Puntuacion > 0, "Positiva", "Negativa"))
## Warning in inner_join(afinn, ., by = "Palabra"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 3 of `x` matches multiple rows in `y`.
## ℹ Row 671359 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
##   "many-to-many"` to silence this warning.
tema_graf <-
  theme_minimal() +
  theme(text = element_text(family = "serif"),
        panel.grid.minor = element_blank(),
        strip.background = element_rect(fill = "#EBEBEB", colour = NA),
        legend.position = "none",
        legend.box.background = element_rect(fill = "#EBEBEB", colour = NA))

# Cuenta la cantidad de palabras positivas y negativas
conteo_sentimientos <- texto_afinn %>%
  group_by(Tipo) %>%
  summarise(n = n(), .groups = "keep")

conteo_sentimientos$dummy <- "sentimientos"

# Crea la gráfica de barras apilada
grafica_sentimientos <- ggplot(conteo_sentimientos, aes(x = dummy, y = n, fill = Tipo)) +
  geom_bar(stat = "identity") +
  labs(x = "Tipo de sentimiento", y = "Cantidad de palabras", title = "Análisis de sentimientos, Noticias 2021") +
  tema_graf +
  scale_fill_manual(values = c("firebrick3", "green"))

# Muestra la gráfica
print(grafica_sentimientos)

##2022 ###Corpus y nube

# Carga el paquete wordcloud2
library(wordcloud2)
library(htmlwidgets)
library(tm)
library(NLP)
corpus22 <- Corpus(VectorSource(texto_vectorizado22))
# Creación DTM
dtm22 <- DocumentTermMatrix(corpus22)
#Conteo
conteo_total <- colSums(as.matrix(dtm22))
#Ordenar y mostrar los términos comúnes
terminos_comunes22 <- sort(conteo_total, decreasing = TRUE)

# Define una lista de palabras
lista_palabras <- c("discapacidad", "discapacitado", "minusvalido", "diferentes", "enfermito", "capacidades")


# Define los colores para las palabras
colores <- ifelse(names(terminos_comunes22) %in% lista_palabras, "blue", "black")

# Crea la nube de palabras
nube <- wordcloud2(data.frame(word = names(terminos_comunes22), freq = terminos_comunes22),
           color = colores, minSize = 2, size = 0.6)
nube

###Análisis de sentimientos

# Carga los paquetes
library(syuzhet)
library(RColorBrewer)
library(wordcloud)
library(tm)


# Tokenización en el corpus
corpus_tokenizado <- tm_map(corpus22, content_transformer(tolower))
## Warning in tm_map.SimpleCorpus(corpus22, content_transformer(tolower)):
## transformation drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removePunctuation)
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removePunctuation):
## transformation drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removeNumbers)
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removeNumbers): transformation
## drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removeWords, stopwords("spanish"))
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removeWords,
## stopwords("spanish")): transformation drops documents
# Obtención del texto tokenizado como un vector
texto_palabras <- sapply(corpus_tokenizado, function(x) unlist(strsplit(as.character(x), " ")))

# Convertir a una lista
texto_palabras <- unlist(texto_palabras)

# Eliminar elementos vacíos
texto_palabras <- texto_palabras[texto_palabras != ""]

texto_palabras <- texto_palabras[nchar(texto_palabras) > 2]


# Análisis de sentimientos
sentimientos_df <- get_nrc_sentiment(texto_vectorizado22, lang = "spanish")
head(sentimientos_df)
##   anger anticipation disgust fear joy sadness surprise trust negative positive
## 1    28           68      14   44  57      32       30   118       87      186
## 2    76          118      55   99  80      93       48   243      228      360
## 3    34           70      32   58  44      43       24   167      124      254
## 4    65          115      35   86  71      80       56   206      203      337
## 5    33           70      29   50  33      43       23   127      130      203
## 6    50           75      30   54  56      54       32   172      131      245
# Gráfica de barras sentimientos
barplot(
  colSums(prop.table(sentimientos_df[, 1:8])),
  space = 0.2,
  horiz = FALSE,
  las = 1,
  cex.names = 0.7,
  col = brewer.pal(n = 8, name = "Set3"),
  main = "Gobierno, 2022",
  xlab = "emociones", ylab = NULL
)

# Función para obtener las palabras únicas y sus frecuencias para un sentimiento específico
obtener_palabras_sentimiento <- function(sentimiento, texto_palabras, sentimientos_df) {
  palabras_sentimiento <- texto_palabras[sentimientos_df[, sentimiento] > 0]
  palabras_sentimiento_orden <- sort(table(palabras_sentimiento), decreasing = TRUE)
  return(palabras_sentimiento_orden)
}

# Obtener palabras únicas y frecuencias para cada sentimiento
palabras_trust_orden <- obtener_palabras_sentimiento("trust", texto_palabras, sentimientos_df)
palabras_tristeza_orden <- obtener_palabras_sentimiento("sadness", texto_palabras, sentimientos_df)
palabras_anti_orden <- obtener_palabras_sentimiento("anticipation", texto_palabras, sentimientos_df)

# Mostrar las palabras más frecuentes para cada sentimiento
head(palabras_trust_orden, n = 12)
## palabras_sentimiento
##                debe       ser       ley   señales             procede      caso 
##      1960      1832      1823      1807      1415      1376      1317      1307 
##  artículo     tabla     deben  proyecto 
##      1204      1190      1164      1084
head(palabras_tristeza_orden, n = 12)
## palabras_sentimiento
##                debe       ser       ley   señales             procede      caso 
##      1960      1832      1823      1807      1415      1376      1317      1307 
##  artículo     tabla     deben  proyecto 
##      1204      1190      1164      1084
head(palabras_anti_orden, n = 12)
## palabras_sentimiento
##                debe       ser       ley   señales             procede      caso 
##      1960      1832      1823      1807      1415      1376      1317      1307 
##  artículo     tabla     deben  proyecto 
##      1204      1190      1164      1084
#El diccionario lee discapacidad como una palabra triste

library(tidyverse)
library(tidytext)
library(tm)
library(lubridate)
library(zoo)
library(scales)

afinn <- read.csv("lexico_afinn.en.es.csv", stringsAsFactors = F, fileEncoding = "latin1") %>% 
  tibble::as_tibble()

texto_vectorizado22df <- as.data.frame(texto_vectorizado22)

texto_afinn <- 
  texto_vectorizado22df %>%
  unnest_tokens(input = "texto_vectorizado22", output = "Palabra") %>%
  inner_join(afinn, ., by = "Palabra") %>%
  mutate(Tipo = ifelse(Puntuacion > 0, "Positiva", "Negativa"))
## Warning in inner_join(afinn, ., by = "Palabra"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 11 of `x` matches multiple rows in `y`.
## ℹ Row 91473 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
##   "many-to-many"` to silence this warning.
tema_graf <-
  theme_minimal() +
  theme(text = element_text(family = "serif"),
        panel.grid.minor = element_blank(),
        strip.background = element_rect(fill = "#EBEBEB", colour = NA),
        legend.position = "none",
        legend.box.background = element_rect(fill = "#EBEBEB", colour = NA))

# Cuenta la cantidad de palabras positivas y negativas
conteo_sentimientos <- texto_afinn %>%
  group_by(Tipo) %>%
  summarise(n = n(), .groups = "keep")

conteo_sentimientos$dummy <- "sentimientos"

# Crea la gráfica de barras apilada
grafica_sentimientos <- ggplot(conteo_sentimientos, aes(x = dummy, y = n, fill = Tipo)) +
  geom_bar(stat = "identity") +
  labs(x = "Tipo de sentimiento", y = "Cantidad de palabras", title = "Análisis de sentimientos, Noticias 2022") +
  tema_graf +
  scale_fill_manual(values = c("firebrick3", "green"))

# Muestra la gráfica
print(grafica_sentimientos)

##2023 ###Corpus y nube

# Carga el paquete wordcloud2
library(wordcloud2)
library(htmlwidgets)
library(tm)
library(NLP)

texto_vectorizado23 <- iconv(texto_vectorizado23, to = "UTF-8", sub = NA)
texto_vectorizado23 <- iconv(texto_vectorizado23, to = "ASCII//TRANSLIT")

corpus23 <- Corpus(VectorSource(texto_vectorizado23))

# Creación DTM
dtm23 <- DocumentTermMatrix(corpus23)
#Conteo
conteo_total <- colSums(as.matrix(dtm23))
#Ordenar y mostrar los términos comúnes
terminos_comunes23 <- sort(conteo_total, decreasing = TRUE)

# Define una lista de palabras
lista_palabras <- c("discapacidad", "discapacitado", "minusvalido", "diferentes", "enfermito", "capacidades")


# Define los colores para las palabras
colores <- ifelse(names(terminos_comunes23) %in% lista_palabras, "blue", "black")

# Crea la nube de palabras
nube <- wordcloud2(data.frame(word = names(terminos_comunes23), freq = terminos_comunes23),
           color = colores, minSize = 2, size = 0.6)
nube

###Análisis de sentimientos

# Carga los paquetes
library(syuzhet)
library(RColorBrewer)
library(wordcloud)
library(tm)



# Tokenización en el corpus
corpus_tokenizado <- tm_map(corpus23, content_transformer(tolower))
## Warning in tm_map.SimpleCorpus(corpus23, content_transformer(tolower)):
## transformation drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removePunctuation)
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removePunctuation):
## transformation drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removeNumbers)
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removeNumbers): transformation
## drops documents
corpus_tokenizado <- tm_map(corpus_tokenizado, removeWords, stopwords("spanish"))
## Warning in tm_map.SimpleCorpus(corpus_tokenizado, removeWords,
## stopwords("spanish")): transformation drops documents
# Obtención del texto tokenizado como un vector
texto_palabras <- sapply(corpus_tokenizado, function(x) unlist(strsplit(as.character(x), " ")))

# Convertir a una lista
texto_palabras <- unlist(texto_palabras)

# Eliminar elementos vacíos
texto_palabras <- texto_palabras[texto_palabras != ""]

texto_palabras <- texto_palabras[nchar(texto_palabras) > 2]


# Análisis de sentimientos
sentimientos_df <- get_nrc_sentiment(texto_vectorizado23, lang = "spanish")
head(sentimientos_df)
##   anger anticipation disgust fear joy sadness surprise trust negative positive
## 1     0            5       0    1   4       5        2    13        9       20
## 2     2            1       1    2   0       4        0     1        7        2
## 3     1            6       1    3   7       3        3    19        6       19
## 4     2            5       0    5   3       5        1    19       12       19
## 5     2            4       0    5   3       3        1    20       10       19
## 6     3           11       5    9   7      10        4    28       21       39
# Gráfica de barras sentimientos
barplot(
  colSums(prop.table(sentimientos_df[, 1:8])),
  space = 0.2,
  horiz = FALSE,
  las = 1,
  cex.names = 0.7,
  col = brewer.pal(n = 8, name = "Set3"),
  main = "Gobierno, 2023",
  xlab = "emociones", ylab = NULL
)

# Función para obtener las palabras únicas y sus frecuencias para un sentimiento específico
obtener_palabras_sentimiento <- function(sentimiento, texto_palabras, sentimientos_df) {
  palabras_sentimiento <- texto_palabras[sentimientos_df[, sentimiento] > 0]
  palabras_sentimiento_orden <- sort(table(palabras_sentimiento), decreasing = TRUE)
  return(palabras_sentimiento_orden)
}

# Obtener palabras únicas y frecuencias para cada sentimiento
palabras_trust_orden <- obtener_palabras_sentimiento("trust", texto_palabras, sentimientos_df)
palabras_tristeza_orden <- obtener_palabras_sentimiento("sadness", texto_palabras, sentimientos_df)
palabras_anti_orden <- obtener_palabras_sentimiento("anticipation", texto_palabras, sentimientos_df)

# Mostrar las palabras más frecuentes para cada sentimiento
head(palabras_trust_orden, n = 12)
## palabras_sentimiento
##       incluye      convenio           dif      servicio      nacional 
##          1497          1458          1368          1364          1357 
##      presente mantenimiento    suministro        social  discapacidad 
##          1316          1202          1194          1184          1084 
##          obra      recursos 
##          1076          1047
head(palabras_tristeza_orden, n = 12)
## palabras_sentimiento
##       incluye      convenio           dif      servicio      nacional 
##          1497          1458          1368          1364          1357 
##      presente mantenimiento    suministro        social  discapacidad 
##          1316          1202          1194          1184          1084 
##          obra      recursos 
##          1076          1047
head(palabras_anti_orden, n = 12)
## palabras_sentimiento
##       incluye      convenio           dif      servicio      nacional 
##          1497          1458          1368          1364          1357 
##      presente mantenimiento    suministro        social  discapacidad 
##          1316          1202          1194          1184          1084 
##          obra      recursos 
##          1076          1047
#El diccionario lee discapacidad como una palabra triste
library(tidyverse)
library(tidytext)
library(tm)
library(lubridate)
library(zoo)
library(scales)

afinn <- read.csv("lexico_afinn.en.es.csv", stringsAsFactors = F, fileEncoding = "latin1") %>% 
  tibble::as_tibble()

texto_vectorizado23df <- as.data.frame(texto_vectorizado23)

texto_afinn <- 
  texto_vectorizado23df %>%
  unnest_tokens(input = "texto_vectorizado23", output = "Palabra") %>%
  inner_join(afinn, ., by = "Palabra") %>%
  mutate(Tipo = ifelse(Puntuacion > 0, "Positiva", "Negativa"))
## Warning in inner_join(afinn, ., by = "Palabra"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 11 of `x` matches multiple rows in `y`.
## ℹ Row 418908 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
##   "many-to-many"` to silence this warning.
tema_graf <-
  theme_minimal() +
  theme(text = element_text(family = "serif"),
        panel.grid.minor = element_blank(),
        strip.background = element_rect(fill = "#EBEBEB", colour = NA),
        legend.position = "none",
        legend.box.background = element_rect(fill = "#EBEBEB", colour = NA))

# Cuenta la cantidad de palabras positivas y negativas
conteo_sentimientos <- texto_afinn %>%
  group_by(Tipo) %>%
  summarise(n = n(), .groups = "keep")

conteo_sentimientos$dummy <- "sentimientos"

# Crea la gráfica de barras apilada
grafica_sentimientos <- ggplot(conteo_sentimientos, aes(x = dummy, y = n, fill = Tipo)) +
  geom_bar(stat = "identity") +
  labs(x = "Tipo de sentimiento", y = "Cantidad de palabras", title = "Análisis de sentimientos, Noticias 2023") +
  tema_graf +
  scale_fill_manual(values = c("firebrick3", "green"))

# Muestra la gráfica
print(grafica_sentimientos)