0
respostas

Web Scraping com Python

Oi pessoal, estou desenvolvendo um sistema no Django para o meu trabalho e ele precisa fazer uma verificação para cadastro dos usuários. Eu preciso definir se o usuário que pretende acessar os serviços está inscrito no SIGA da UFPR ou não. Assim, eu posso destinar para cadastros diferentes (usuários internos ou externos). Como eu não tenho acesso ao banco de dados geral da universidade, resolvi fazer um Web Scraping que me retorna todos os dados que eu preciso. Para contextualizar, são professores (neste início de projeto) que acessam o sistema e na verificação, se houver um usuário com o nome no SIGA, ele retorna o nome do professor, os cursos que ele está vinculado, seus alunos (que tem nome, tipo de curso, e data de ingresso). Eu sei que o código que vou apresentar, ainda precisa passar por uma refatoração, mas gostaria de uma ajuda em como posso fazer isso e também qual o melhor jeito de apresentar essas informações para aproveitá-las no Django posteriormente.

from bs4 import BeautifulSoup
import requests
import re

def verificaNomeNoSiga(nome):
    url = 'https://www.prppg.ufpr.br/siga/visitante/ConsultarPessoa'

    nome = nome.upper()

    payload = {'nome': nome, 'operacao': 'buscarDocentes'}

    site = requests.post(url, data=payload)

    soup = BeautifulSoup(site.text, 'lxml')

    tabela = soup.find("table", {"id": "tabela"})

    td = tabela.find_all('td')

    input = tabela.find('input', {'name': 'idAutor'}).get('value')

    url_alunos = f'https://www.prppg.ufpr.br/siga/visitante/Colaborador?idAutor={input}&operacao=perfilDocente&tipoRequisicao=ajax'

    site_alunos = requests.get(url_alunos)

    soup_alunos = BeautifulSoup(site_alunos.text, 'lxml')

    alunos = soup_alunos.find_all("h3", {"class": "profile-username"})

    tipos = soup_alunos.find_all("p", {"class": "text-muted text-center"})

    inicios = soup_alunos.find_all("a", {"class": "pull-right"})

    aluno = []
    tipo = []
    for tag in alunos:
        aluno.append((tag.text.strip()).upper())
    for tag in tipos:
        tipo.append((tag.text.strip()).upper())

    inicio = re.findall(r'\d{2}/\d{2}/\d{4}', str(inicios))

    lista_alunos = []
    for i in range(len(aluno)):
        individuo = (aluno[i], tipo[i], inicio[i])
        lista_alunos.append(individuo)

    for tag in td:
        if nome in tag:
            pessoa = td[0].text.strip()
            vinculos = re.findall(r'>(.*?)<', str(td[1]).upper())
            break

    lista = {'nome': pessoa,
             'vinculos': vinculos,
             'alunos': lista_alunos}

    print(lista)



verificaNomeNoSiga('Nome do Professor')

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software