Sebasur90 commited on
Commit
fd2b1a3
·
1 Parent(s): 07f6c21

Upload scrapper_rss.py

Browse files
Files changed (1) hide show
  1. scrapper_rss.py +125 -0
scrapper_rss.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import pandas as pd
3
+ import requests
4
+ import time
5
+ from bs4 import BeautifulSoup
6
+ from wordcloud import WordCloud
7
+ import matplotlib.pyplot as plt
8
+ from diarios_rss import diarios
9
+ import agrega_sentimientos
10
+ import datetime as dt
11
+ import streamlit as st
12
+
13
+ class Scrapper:
14
+
15
+ def __init__(self):
16
+ self.noticias = {}
17
+
18
+ def recorre_diarios(self):
19
+ contador = 0
20
+ for diario in diarios:
21
+ try:
22
+ print(f"Obteniendo noticias de {diarios[diario]['diario']} ,seccion {diarios[diario]['seccion']} ")
23
+ st.session_state['muestra_progreso']=f"{diarios[diario]['diario']} -- > seccion {diarios[diario]['seccion']} "
24
+ st.write(st.session_state['muestra_progreso'])
25
+ time.sleep(0.5)
26
+ url = requests.get(diarios[diario]['rss'])
27
+ soup = BeautifulSoup(url.content, "xml")
28
+ items_pagina = soup.find_all('item')
29
+ for item in range(len(items_pagina)):
30
+ noticia = {}
31
+ noticia['diario'] = diarios[diario]['diario']
32
+ noticia['seccion'] = diarios[diario]['seccion']
33
+ noticia['titulo'] = items_pagina[item].title.text
34
+ if items_pagina[item].description == None or items_pagina[item].description == " " or items_pagina[item].description == "<NA>":
35
+ if diarios[diario]['diario'] == 'Perfil':
36
+ noticia['descripcion'] = items_pagina[item].description.text.split(
37
+ "</p>")[1].split('<a href')[0]
38
+ if diarios[diario]['diario'] == 'La_izquierda_diario':
39
+ noticia['descripcion'] = items_pagina[item].description.text.split("<p>")[
40
+ 1].split('</p>')[0]
41
+ else:
42
+ noticia['descripcion'] = items_pagina[item].title.text
43
+ else:
44
+ if diarios[diario]['diario'] == 'Perfil':
45
+ noticia['descripcion'] = items_pagina[item].description.text.split(
46
+ "</p>")[1].split('<a href')[0]
47
+ if diarios[diario]['diario'] == 'La_izquierda_diario':
48
+ noticia['descripcion'] = items_pagina[item].description.text.split("<p>")[
49
+ 1].split('</p>')[0]
50
+ else:
51
+ noticia['descripcion'] = (
52
+ items_pagina[item].description.text)
53
+
54
+ self.noticias[contador] = noticia
55
+ contador = contador + 1
56
+ except:
57
+ pass
58
+
59
+ def formateo_noticias(self):
60
+ dataframe_noticias = pd.DataFrame(self.noticias).transpose()
61
+ dataframe_noticias.drop_duplicates(subset=['titulo'])
62
+ return dataframe_noticias
63
+
64
+ def sentimientos(self, dataframe_noticias):
65
+ with st.spinner('Descargando sentimientos para las noticias..'):
66
+ dia_str = str(dt.datetime.today().date())
67
+ noticias = agrega_sentimientos.genera_excel_sentimientos(
68
+ dataframe_noticias)
69
+ noticias.to_csv(
70
+ f"diarios/noticias_con_sentimientos_{dia_str}.csv", index=False)
71
+ pass
72
+
73
+ def apila_diarios_historicos(self):
74
+ lista_diarios = os.listdir('diarios')
75
+ print(lista_diarios)
76
+ lista_diarios.remove('diarios_historicos.csv')
77
+ dataframes = []
78
+ dataframes.append(pd.read_csv("diarios/diarios_historicos.csv"))
79
+ for diarios in lista_diarios:
80
+ dataframes.append(pd.read_csv("diarios/"+diarios))
81
+ apilados = pd.concat(dataframes, axis=0)
82
+ apilados=apilados.drop_duplicates(subset=['titulo'])
83
+ apilados.to_csv(f"diarios/diarios_historicos.csv", index=False)
84
+
85
+ def agrega_fecha_hoy(self):
86
+ fechas = pd.read_csv("fechas.csv")
87
+ dia_str = str(dt.datetime.today().date())
88
+ fechas = fechas.append({'dia': dia_str}, ignore_index=True)
89
+ fechas.to_csv("fechas.csv", index=False)
90
+
91
+
92
+ def transforma_letras_para_wordcloud(self, dataframe_noticias):
93
+ columna_analizada = list(dataframe_noticias.titulo)
94
+ acentos = {'á': 'a', 'é': 'e', 'í': 'i', 'ó': 'o', 'ú': 'u',
95
+ 'Á': 'A', 'E': 'E', 'Í': 'I', 'Ó': 'O', 'Ú': 'U'}
96
+ lista_palabras_para_wordcloud = []
97
+ for palabras in columna_analizada:
98
+ palabras_div = palabras.split(' ')
99
+ for letras in palabras_div:
100
+ for acen in acentos:
101
+ if acen in letras:
102
+ letras = letras.replace(acen, acentos[acen])
103
+ lista_palabras_para_wordcloud.append(letras.lower())
104
+ return ' '.join(lista_palabras_para_wordcloud)
105
+
106
+ def genera_wordcloud(self, palabras_para_wordcloud):
107
+ palabras_ignoradas = set(['a', 'ante', 'con', 'contra', 'de', 'desde', 'durante', 'en', 'para', 'por', 'segun', 'sin', 'sobre', 'el', 'la', 'los', 'las',
108
+ '...', 'y', 'hoy', 'este', 'cuanto', 'un', 'del', 'las', 'que', 'con', 'todos', 'es', '¿qué', 'como', 'cada',
109
+ 'jueves', '¿cuanto', 'hoy', 'al', 'cual', 'se', 'su', 'sus', 'lo', 'una', 'un', 'tiene',
110
+ 'le', 'habia'])
111
+
112
+ wordcloud = WordCloud(width=1920, height=1080, stopwords=palabras_ignoradas).generate(
113
+ palabras_para_wordcloud)
114
+ plt.imshow(wordcloud, interpolation='bilinear')
115
+ plt.axis("off")
116
+
117
+ def run(self):
118
+ self.recorre_diarios()
119
+ dataframe_noticias = self.formateo_noticias()
120
+ self.sentimientos(dataframe_noticias)
121
+ self.apila_diarios_historicos()
122
+ palabras_para_wordcloud = self.transforma_letras_para_wordcloud(
123
+ dataframe_noticias)
124
+ self.genera_wordcloud(palabras_para_wordcloud)
125
+ self.agrega_fecha_hoy()