def analize(self, url):
        try:
            print("Dentro de analize")
            print(url)
            html = urlopen(url)
        except HTTPError as e:
            print(e)
        except URLError as u:
            print("Servidor depo no encontrado " + url)
            print(u)
        else:
            content = html.read().decode('utf-8', 'ignore')
            res = BeautifulSoup(content, "html.parser")
            strnumero = res.find("h2", {"class": "numero"})

            if (strnumero is None):
                print("No existe boletín para este día")
                return False

            numero = int(strnumero.getText().split()[2])
            info = res.find("span", {"class": "fecha"}).getText().split()
            year = int(info[len(info) - 4])
            mes = self.meses.index(
                info[len(info) - 6]) + 1  # El array comienza en 0
            dia = int(info[len(info) - 8])
            fecha = date(year, mes, dia)

            if (self.checkNumber(year, numero, "BOPPO")):
                return True

            self.beginAnalysis(fecha)
            self.setAnalysisState("BOPPO", fecha, "INICIADO")

            grupo = res.findAll("ul", {"class": "listadoSumario"})

            for tag in grupo:
                organismo = tag.findPrevious('p', {"class": "Org"}).getText()
                seccion = tag.findPrevious('h4', {"class": "tit"}).getText()
                tmp = tag.fetchPreviousSiblings()[0]

                # Busco los elementos anteriores
                lis = tag.findAll("li")
                for li in lis:
                    noticia = Noticia()
                    noticia.bulletin = "BOPPO"
                    noticia.bulletin_year = year
                    noticia.bulletin_no = numero
                    noticia.bulletin_date = fecha
                    noticia.created_at = datetime.now()
                    noticia.updated_at = datetime.now()
                    noticia.seccion = seccion
                    noticia.organismo = organismo
                    noticia.organo = li.span.getText()
                    noticia.servicio = ""
                    noticia.organization = li.span.getText()
                    noticia.newname = li.p.getText()

                    if (tmp.get("class")[0] == "inst"):
                        noticia.organo = tmp.getText()

                    if (self.isNotificable(noticia.newname)):
                        noticia.notify = 1

                    noticia.url = "https://boppo.depo.gal" + li.a['href']
                    self.normalizar(noticia)
                    noticia.imprimir()
                    noticia.save()
            # LLegados aquí, ha finalizado el análisis
            self.setAnalysisState("BOPPO", fecha, "FINALIZADO")
Example #2
0
    def analize(self, url):
        try:
            html = urlopen(url)
        except HTTPError as e:
            print(e)
        except URLError as u:
            print("Servidor depo no encontrado " + url)
            print(u)
        else:
            content = html.read().decode('utf-8', 'ignore')
            res = BeautifulSoup(content, "html.parser")

            # Vamos a por el número:
            grupo_codigo = res.find('div',
                                    {"class": "field--name-field-ail-codigo"})
            numero = int(
                grupo_codigo.find('div', {'class', 'field__item'}).getText())
            grupo_codigo = res.find(
                'div',
                {'class', 'field--name-field-ail-bop-fecha-publicacion'})
            sfecha = grupo_codigo.find('div', {
                'class': 'field__item'
            }).getText().split()
            dia = int(sfecha[1])
            mes = self.meses.index(sfecha[3].lower()) + 1
            anio = int(sfecha[5])
            fecha = date(anio, mes, dia)

            if (self.checkNumber(anio, numero, "BOPLU")):
                return True
            self.beginAnalysis(fecha)
            self.setAnalysisState("BOPLU", fecha, "INICIADO")

            div = res.find("div",
                           {"class": "field--name-field-ail-bop-contenido"})
            lista = div.find("ul")
            secciones = lista.children
            for seccion in secciones:
                if hasattr(seccion, 'strong'):
                    seccion_nombre = seccion.strong.getText()

                if (not hasattr(seccion, 'children')):
                    continue
                lista = seccion.find("ul")
                if (lista is not None):
                    organismos = lista.findChildren("li", recursive=False)
                    for organismo in organismos:
                        noticias = organismo.find("ul")
                        if ((organismo.strong is None) or (noticias is None)):
                            noticia = Noticia()
                            noticia.bulletin = "BOPLU"
                            noticia.bulletin_year = anio
                            noticia.bulletin_no = numero
                            noticia.bulletin_date = fecha
                            noticia.created_at = datetime.now()
                            noticia.updated_at = datetime.now()
                            noticia.seccion = "OTROS"
                            noticia.organismo = seccion_nombre
                            noticia.organo = ""
                            noticia.servicio = ""
                            noticia.organization = ""
                            if (organismo.a is not None):
                                noticia.newname = organismo.a.getText()
                                noticia.url = "http://deputacionlugo.gal" + organismo.a[
                                    'href']
                            else:
                                print("Ha habido una incidencia")
                                noticia.newname = "INCIDENCIA: "

                            if (self.isNotificable(noticia.newname)):
                                noticia.notify = 1

                            self.normalizar(noticia)
                            noticia.imprimir()
                            noticia.save()
                        else:
                            noticias = organismo.ul.findChildren("li")
                            for n in noticias:
                                noticia = Noticia()
                                noticia.bulletin = "BOPLU"
                                noticia.bulletin_year = anio
                                noticia.bulletin_no = numero
                                noticia.bulletin_date = fecha
                                noticia.created_at = datetime.now()
                                noticia.updated_at = datetime.now()
                                noticia.seccion = seccion_nombre
                                noticia.organismo = organismo.strong.getText()
                                noticia.organo = ""
                                noticia.servicio = ""
                                noticia.organization = ""
                                noticia.newname = n.a.getText()

                                if (self.isNotificable(noticia.newname)):
                                    noticia.notify = 1

                                noticia.url = "http://deputacionlugo.gal" + n.a[
                                    'href']
                                self.normalizar(noticia)
                                noticia.imprimir()
                                noticia.save()
                else:
                    print("Lista vacía")
            self.setAnalysisState("BOPLU", fecha, "FINALIZADO")