Trata-se de um simples projeto de ETL (Extract Transform Load) de um site que exibe escalas de serviços usando Selenium e Pandas.
Um amigo veio até mim me perguntar como poderia fazer um simples programa para atender a necessidade dele, que era de obter alguns dados em um site dinâmico, e nesse processo a primeira etapa seria realizar o login para poder entrar no sistema e em seguida dar prosseguimento a navageção e extração de dados, então tive a ideia de usar o Selenium já que ele conta uma biblioteca muito boa para fazer WebScraping e em seu kit, há ferramentas prontas para leitura de HTML, interação com páginas (autenticação) e etc.
Como eu estava a algum tempo sem usar o Selenium, decidi criar primeiro de criar um script e posteriormente explicar passo a passo desse projeto para que ele tivesse um norte.
Para rodar o código e/ou fazer as alterações que você queira:
- Selenium # para ETL
- Pandas # para salvar os dados em formato de tabela
- Dotenv (python-dotenv) # carregar informações de login do usuário
- Clone o repositório.
git clone https://github.com/g42puts/webscraping_modelo_pg-servicos.git
- Faça instalação das bibliotecas requisitadas.
- No Linux:
pip3 install -r requiriments.txt
- No Windows:
pip install -r requiriments.txt
- Faça as alterações no código da forma que quiser, não se preocupe com direitos autorais ou qualquer outra coisa, este repositório é apenas para fins de estudo.
Segundo este artigo da Escola de Dados:
O XPath é uma linguagem de consulta que nos ajuda a navegar por documentos que usam marcadores, como os arquivos XML (Extensible Markup Language) e HTML (HyperText Markup Language). Para você que já entende o básico de HTML, aqui será possível ter uma introdução sobre como usar XPath para extrair informações deste tipo de documento.
Como deu para entender, o XPATH é uma poderosa ferramenta de consulta, para método comparativo, é como barra de pesquisas do Google, você digita o que você está procurando, e ele vai procurar por tudo que incluir ou fizer referência aquilo, mas ele é ainda mais preciso e seletivo, pois através do XPATH, eu especifico com precissão o que eu quero pesquisar, vamos a um exemplo...
<h2 class="titulo-com-grafismo" style="margin-bottom:14px">Exemplo</h2>
Através da busca pelo XPATH, eu irei procurar na página que me encontro, todos os <h2>
que a classe seja igual a titulo-com-grafismo, e é este formato que o meu XPATH terá:
//h2[@class="titulo-com-grafismo"]
Apenas isso já é o suficiente para que eu consiga localizar o trecho do HTML que estou procurando, porém pode havar casos em que exista na página mais de um trecho identico, e para isso eu posso usar outro formatação, mais especifica ainda, como a seguinte:
//h2[contains(@style, 'margin-bottom:14px')]
A diferença desse para o anterior, é que aqui estou procurando por h2 que contenha um determinado style, posso ser ainda mais preciso, como na seguinte forma:
//h2[@class="titulo-com-grafismo" and contains(@style, 'margin-bottom:14px')]
Aqui não vai haver erro, caso queira procurar até mesmo por elementos que o seu valor textual seja X, pode fazer da seguinte forma:
//h2[@class="titulo-com-grafismo" and contains(text(), 'Exemplo')]
Eu particulamente recomendo que você faça alguns testes em alguma página da sua escolha para enteder mais ainda sobre o XPATH e como é eficiente.
A nevagação na página foi feita utilizando as ferrementas do próprio Selenium para navegação e o método de consulta XPATH.
Na função service_webscrap do arquivo main.py:
-
Defini variaveis com credenciais do usuário
-
Defini variaveis nome do mes atual e mes seguinte
-
Defini as configs do navegador e defini meu navegador com o nome driver
-
Navageção até o site da escala de serviço
4.1 Primeiramente iniciei o navegador do Selenium
4.2 Naveguei até a página de login, enviei as credenciais de login, e realizei o login
4.3 Em seguida naveguei até a página da escala
- Extração dos dados na página da escala
5.1 Fiz a extração dos dados utilizando o XPATH e TAG_NAME, métodos de consulta do Selenium
5.2 Após fazer a extração do primeiro mês, passei para a página do mês seguinte e fiz outra extração
- Após a extração, todos dados foram salvos em formato .csv com nome do mês a qual se refere a escala
A forma como os dados será salva na tabela:
dia | mes | ano | dia_do_mes | servico |
---|---|---|---|---|
30 | março | 2023 | Quinta-Feira | [M] |
Deixei como exemplo no repositório, o arquivo teste_google.py
que faz a extração do link da logo da página inicial do Google.