def crawlerFamosoRelacionados(i): famoso = {'id': i[0], 'nome': i[1].strip(), 'link': i[2], 'nascimento': i[3], 'idade': i[4], 'signo': i[5], 'relacionamento': i[6], 'conjuge': i[7]} try: html = urllib.request.urlopen("http://ego.globo.com" + famoso['link']) soup = bs(html, "html.parser") listaRelacionados = soup.find("ul", class_ = "famosos-relacionados") print(str(famoso['nome'])) if listaRelacionados != None: listaRelacionados = listaRelacionados.find_all("a") for j in listaRelacionados: linkRelacionado = j.attrs['href'] nomeRelacionado = j.find("img").attrs['alt'] '''nomeRelacionado = limpezaNome(nomeRelacionado)''' famosoRelacionado = {"idFamoso1": famoso['id'], "nome": nomeRelacionado, "link": linkRelacionado } if model.verificarFamosoRelacionadoJaInserido(famosoRelacionado['idFamoso1'],famosoRelacionado['nome']) == False: if model.inserirFamosoRelacionado(famosoRelacionado) == True: print(" - Famoso: " + str(famosoRelacionado['nome']) + " inserido com sucesso.") else: print(" - Famoso: " + str(famosoRelacionado['nome']) + " já inserido.") return True except urllib.error.HTTPError as e: if e.code == 404: print("Pagina do famoso nao encontrada") model.gravarLog(idMensagens = 11, idFamoso = famoso['id']) return False else: print(str(e) + " Famoso: " + str(famoso['nome'])) return False except Exception as e: print(str(e)) return False
def processarNoticias(noticias): for i in noticias: try: html = urllib.request.urlopen(i['permalink']) soup = bs(html, "html.parser") except urllib.error.HTTPError as e: if e.code == 404: print("Noticia não encontrada. (Erro 404) - Proxima noticia... ") model.gravarLog(idMensagens=11, link=i['permalink']) continue i['titulo'] = i['titulo'].replace("\n","") i['titulo'] = i['titulo'].replace("\t","") i['titulo'] = i['titulo'].replace("\r","") i['titulo'] = i['titulo'].replace('"', "'") i['titulo'] = i['titulo'].replace("\u266a","") i['titulo'] = i['titulo'].replace("\u200f","") i['titulo'] = i['titulo'].strip() if model.verificarNoticiaInserida(i['titulo'], i['permalink']) == False: if i['tipo'] == "materia": try: paragrafos = soup.find('div', class_ = "materia-conteudo").find_all('p') except: print("Noticia sem paragrafos. **********************************") model.gravarLog(idMensagens=27,tituloNoticia=i['titulo'], link= i['permalink']) continue texto = "" for j in paragrafos: temp = j.get_text() temp = temp.replace("\n","") temp = temp.replace("\t","") temp = temp.replace("\r","") temp = temp.replace("\u266a","") if len(temp) > 3: texto += temp texto = texto.replace('"',"'") i['subtitulo'] = i['subtitulo'].replace('"', "'") else: '''Noticia do tipo Galeria que não possui texto''' print("************ Noticia tipo GALERIA: " + i['permalink'] + " TIPO: " + str(i['tipo'])) texto = None i['subtitulo'] = i['subtitulo'].replace('"',"'") noticia = { 'titulo': i['titulo'], 'tipo': i['tipo'], 'subtitulo': i['subtitulo'], 'link': i['permalink'], 'texto': texto, 'data': i['primeira_publicacao']} model.cadastrarNoticia(noticia)
def crawlerListaFamosos(): html = urllib.request.urlopen("http://ego.globo.com/famosos/") soup = bs(html, "html.parser") listahtmlfamosos = soup.find(id = 'main').find_all("a") qtdAtualFamosos = 0 qtdTotalFamosos = len(listahtmlfamosos) for i in listahtmlfamosos: qtdAtualFamosos += 1 famoso = { 'link': i.get('href'), 'nome': i.get_text() } try: htmldetalhes = urllib.request.urlopen("http://ego.globo.com" + famoso['link']) soupdetalhes = bs(htmldetalhes, "html.parser") detalheshtml = soupdetalhes.find("ul", class_ = "detalhes") if detalheshtml != None: relacionamento = detalheshtml.find("li", class_="relacionamento") if relacionamento != None: relacionamento = relacionamento.get_text() relacionamento = relacionamento.split(" ") relacionamento = relacionamento[0] relacionamento = relacionamento.replace("\n", "") if relacionamento == "casada": relacionamento = "casado" if relacionamento == "solteira": relacionamento = "solteiro" if relacionamento == "divorciada": relacionamento = "divorciado" relacionamento = model.buscarTipoRelacionamento(relacionamento, famoso['nome']) else: relacionamento = 0 conjuge = detalheshtml.find("li", class_="relacionamento") if conjuge != None: conjuge = conjuge.find("a") if conjuge != None: conjugeNome = conjuge.get_text() '''conjugeNome = limpezaNome(conjugeNome)''' conjuge = model.inserirConjuge(conjugeNome, famoso['nome']) else: conjuge = 0 else: conjuge = 0 idade = detalheshtml.find("li", class_ = "aniversario") if idade != None: idade = idade.get_text() idade = idade.split("(") idade = idade[len(idade) - 1] idade = int(idade[:2]) datanascimento = detalheshtml.find("time") if datanascimento != None: datanascimento = datanascimento['datetime'] signo = detalheshtml.find("li", class_ = "signo") if signo != None: signo = signo.find("a").get_text() signo = model.buscarSigno(signo, famoso['nome']) '''famoso['nome'] = limpezaNome(famoso['nome'])''' famoso.update({'nome': famoso['nome'].strip(), 'idade': idade, 'datanascimento': datanascimento, 'signo': signo, 'relacionamento': relacionamento, 'conjuge': conjuge }) model.inserirfamososdb(famoso,qtdAtualFamosos, qtdTotalFamosos) except urllib.error.HTTPError as err: if err.code == 404: model.gravarLog(idMensagens = 11, nomeFamoso = famoso['nome']) print("Página não encontrada. Gravado no log com sucesso! Famoso: " + famoso['nome']) relacionamento = conjuge = idade = datanascimento = signo = '' '''famoso['nome'] = limpezaNome(famoso['nome'])''' famoso.update({'nome': famoso['nome'], 'idade': idade, 'datanascimento': datanascimento, 'signo': signo, 'relacionamento': relacionamento, 'conjuge': conjuge }) model.inserirfamososdb(famoso) else: model.gravarLog(idMensagens = 12, nomeFamoso = famoso['nome']) print("Erro inesperado ao obter detalhes do famoso. Gravado no log com sucesso! Famoso: " + famoso['nome'])