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))
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))
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)
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))
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))
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))
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')
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))
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))
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')