예제 #1
0
    def scrap(self):
        logger = logging.getLogger('covidata')
        logger.info('Portal de transparência estadual...')
        start_time = time.time()

        # pt_MG = PortalTransparencia_MG()
        # pt_MG.download()
        headers = {
            'User-Agent':
            'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) '
            'Chrome/50.0.2661.102 Safari/537.36'
        }
        page = requests.get(self.url, headers=headers)
        soup = BeautifulSoup(page.content, 'lxml')
        tabela = soup.find_all('table')[0]
        ths = tabela.find_all('thead')[0].find_all('th')
        nomes_colunas = [th.get_text() for th in ths]
        tbody = tabela.find_all('tbody')[0]
        trs = tbody.find_all('tr')
        linhas = []

        for tr in trs:
            tds = tr.find_all('td')
            valores = [td.get_text().strip() for td in tds]
            linhas.append(valores)

        df = pd.DataFrame(data=linhas, columns=nomes_colunas)
        persistir(df, 'portal_transparencia', 'compras', 'MG')

        # arquivo = path.join(config.diretorio_dados, 'MG', 'portal_transparencia',
        #                     '_Compras - Programa de enfrentamento COVID-19.csv')
        # if not os.path.exists(arquivo) and os.path.exists(arquivo + '.crdownload'):
        #     os.rename(arquivo + '.crdownload', arquivo)

        logger.info("--- %s segundos ---" % (time.time() - start_time))
예제 #2
0
    def scrap(self):
        logger = logging.getLogger('covidata')

        logger.info('Portal de transparência da capital...')
        start_time = time.time()

        page = requests.get(self.url)
        soup = BeautifulSoup(page.content, 'lxml')
        tabela = soup.find_all('table')[0]
        ths = tabela.find_all('thead')[0].find_all('th')
        nomes_colunas = [th.get_text() for th in ths]
        tbody = tabela.find_all('tbody')[0]
        trs = tbody.find_all('tr')
        linhas = []

        for tr in trs:
            tds = tr.find_all('td')
            valores = [td.get_text().strip() for td in tds]
            linhas.append(valores)

        df = pd.DataFrame(data=linhas, columns=nomes_colunas)
        persistir(df,
                  'portal_transparencia',
                  'contratacoes',
                  'AP',
                  cidade='Macapa')

        logger.info("--- %s segundos ---" % (time.time() - start_time))
예제 #3
0
    def parse(self):
        """
        Executa o parsing do arquivo JSON.  Executa o download de um arquivo de dados em formato JSON e armazena as
        informações resultantes em um local identificado de acordo com as informações recebidas pelo construtor da
        classe.
        :return:
        """
        nome_arquivo = self.nome_dados + '.json'
        downloader = FileDownloader(self.diretorio, self.url, nome_arquivo)
        downloader.download()

        with open(
                os.path.join(downloader.diretorio_dados,
                             downloader.nome_arquivo)) as json_file:
            dados = json.load(json_file)
            conteudo = dados['data']['rows']
            colunas = dados['data']['cols']
            colunas_df = []

            for coluna in colunas:
                colunas_df.append(coluna['name'])

            linhas_df = []

            for elemento in conteudo:
                linhas_df.append(elemento)

            df = pd.DataFrame(linhas_df, columns=colunas_df)

            persistir(df, self.fonte, self.nome_dados, self.uf)
예제 #4
0
    def scrap(self):
        logger = logging.getLogger('covidata')
        logger.info('Portal de transparência estadual...')
        start_time = time.time()

        headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/50.0.2661.102 Safari/537.36'}
        # page = requests.get(config.url_pt_RN, headers=headers, verify=False)
        session = requests.Session()
        retry = Retry(connect=3, backoff_factor=0.5)
        adapter = HTTPAdapter(max_retries=retry)
        session.mount('http://', adapter)
        session.mount('https://', adapter)

        page = session.get(config.url_pt_RN, headers=headers, verify=False)

        soup = BeautifulSoup(page.content, 'html.parser')
        tabela = soup.find_all('table')[1]
        titulos_colunas = tabela.find_all('thead')[0].find_all('th')
        colunas = [titulo_coluna.get_text() for titulo_coluna in titulos_colunas]

        linhas = tabela.find_all('tbody')[0].find_all('tr')
        linhas_df = []

        for linha in linhas:
            tds = linha.find_all('td')
            valores = [td.get_text().strip() for td in tds]
            linhas_df.append(valores)

        df = pd.DataFrame(linhas_df, columns=colunas)
        persistir(df, 'portal_transparencia', 'compras_e_servicos', 'RN')

        logger.info("--- %s segundos ---" % (time.time() - start_time))
예제 #5
0
    def scrap(self):
        logger = logging.getLogger('covidata')
        logger.info('Portal de transparência estadual...')
        start_time = time.time()
        page = requests.get(config.url_pt_BA)
        soup = BeautifulSoup(page.content, 'html5lib')
        tabela = soup.find_all('table')[0]
        tbody = tabela.find_all('tbody')[0]
        titulos = tbody.contents[1]
        titulos = titulos.find_all('strong')
        nomes_colunas = ['Link para o contrato']
        nomes_colunas += [titulo.get_text() for titulo in titulos]
        linhas = []

        trs = tbody.find_all('tr')
        for i in range(2, len(trs)):
            tds = trs[i].find_all('td')
            links = tds[1].find_all('a')
            if len(links) > 0:
                link_contrato = links[0].attrs['href']
                linha = [link_contrato] + [td.get_text() for td in tds]
                linhas.append(linha)

        df = pd.DataFrame(linhas, columns=nomes_colunas)
        persistir(df, 'portal_transparencia', 'contratos', 'BA')
        logger.info("--- %s segundos ---" % (time.time() - start_time))
예제 #6
0
    def scrap(self):
        logger = logging.getLogger('covidata')
        logger.info('Portal de transparência estadual...')
        start_time = time.time()

        page = requests.get(config.url_pt_MT)
        soup = BeautifulSoup(page.content, 'html.parser')
        tabela = soup.find_all('table')[0]
        ths = tabela.find_all('th')
        colunas = [th.get_text() for th in ths]
        trs = tabela.find_all('tr')
        linhas = []

        for tr in trs:
            tds = tr.find_all('td')
            if len(tds) > 0:
                linhas.append([td.get_text().strip() for td in tds])

        df = pd.DataFrame(data=linhas, columns=colunas)
        persistir(df, 'portal_transparencia', 'contratos', 'MT')

        logger.info("--- %s segundos ---" % (time.time() - start_time))
예제 #7
0
    def pt_TO(self):
        linhas = []
        page = requests.get(config.url_pt_TO)
        soup = BeautifulSoup(page.content, 'html.parser')
        linha_titulos = soup.find(id='tit_consulta_contrato_covid_2__SCCS__1')
        colunas = linha_titulos.find_all('td')
        nomes_colunas = ['Órgão']

        for coluna in colunas:
            nome_coluna = coluna.get_text().strip()

            if nome_coluna != '':
                nomes_colunas.append(nome_coluna)

        for sibling in linha_titulos.next_siblings:
            if isinstance(sibling, Tag):
                # se for o nome do órgão
                texto = sibling.get_text().strip()
                if texto.startswith('Órgão - '):
                    nome_orgao = texto[len('Órgão - '):len(texto)]
                elif (not ('Total do Processo/Contrato' in texto)) and (
                        not ('Total do Tipo de Contratação'
                             in texto)) and (not ('Total do Órgão' in texto)):
                    trs = sibling.find_all('tr')
                    for tr in trs:
                        tds = tr.find_all('td')
                        if len(tds) >= len(nomes_colunas):
                            # indicativo de linha de conteúdo
                            linha = [nome_orgao]

                            for td in tds:
                                texto_tag = td.get_text().strip()
                                if texto_tag != '':
                                    linha.append(texto_tag)

                            linhas.append(linha)

        df = pd.DataFrame(linhas, columns=nomes_colunas)
        persistir(df, 'portal_transparencia', 'contratos', 'TO')
예제 #8
0
    def scrap(self):
        logger = logging.getLogger('covidata')
        logger.info('Portal de transparência da capital...')
        start_time = time.time()
        page = requests.get(config.url_pt_SaoLuis)
        soup = BeautifulSoup(page.content, 'html.parser')
        tabela = soup.find_all('table')[0]
        tbody = tabela.find_all('tbody')[0]
        linhas = tbody.find_all('tr')
        titulos = tabela.find_all('th')
        colunas = ['Link contrato']
        colunas += [titulo.get_text() for titulo in titulos]
        lista_linhas = []

        for linha in linhas:
            data = linha.find_all("td")
            nova_linha = [data[1].find_all('a')[0].attrs['href']]
            nova_linha += [data[i].get_text() for i in range(len(data))]
            lista_linhas.append(nova_linha)

        df = pd.DataFrame(lista_linhas, columns=colunas)
        persistir(df, 'portal_transparencia', 'contratacoes', 'MA', 'São Luís')
        logger.info("--- %s segundos ---" % (time.time() - start_time))
예제 #9
0
    def scrap(self):
        logger = logging.getLogger('covidata')
        logger.info('Tribunal de Contas Estadual...')
        start_time = time.time()

        driver = self.__configurar_browser()
        driver.get(self.url)

        wait = WebDriverWait(driver, 45)

        # Seleciona a seta para baixo do menu dropdown de "Ano contrato"
        #element = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="anoContrato"]/div[3]/span')))
        element = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="tvPrincipal:j_idt25"]/div[3]/span')))
        driver.execute_script("arguments[0].click();", element)

        # Seleciona o ano de 2020
        driver.find_element_by_id('anoContrato_1').click()

        # On hold por 5 segundos
        time.sleep(5)

        # Seleciona o botão "Pesquisar"
        driver.find_element_by_xpath('//*[@id="bPesquisar"]/span[2]').click()

        # On hold por 5 segundos
        time.sleep(5)

        # select_qtd = Select(driver.find_element_by_id('formDtContratos:dtContratos:j_id2'))
        select_qtd = Select(
            driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div/div/form[2]/div/div[2]/select'))
        select_qtd.select_by_visible_text('100')
        time.sleep(5)

        df = self.__processar_paginas(driver, logger)
        persistir(df, 'tce', 'contratos', 'PI')

        logger.info("--- %s segundos ---" % (time.time() - start_time))
예제 #10
0
 def _extrair(self, url, informacao, indice):
     colunas, linhas_df = self.__extrair_tabela(url, indice)
     df = pd.DataFrame(linhas_df, columns=colunas)
     persistir(df, 'tce', informacao, 'AC')