Acessando a internet, coletando seus dados e apresentando-os
🔹 Arquivos
🔹 Lógica utilizada para encontrar os dados no site
🔹 Requisitos para rodar o programa
A iniciativa da criação desse projeto se deu por uma vaga de emprego que concorri, a qual teve como teste para os candidatos a criação de um script cuja função é realizar um WebScraping. Sendo assim, a tarefa foi:
- Abrir o site da Amazon;
- Pesquisar por Iphone;
- Coletar os dados de todos os resultados encontrados;
- Criar uma planilha com esses dados.
- app.py: arquivo principal, é ele quem deve ser executado;
- planilhas.py:arquivo que possui os métodos voltados à criação da planilha.
Sobre o arquivo app:
- Linhas 1 à 4 : importando bibliotecas e módulo;
- Linha 6: declarando o navegador que será usado;
- Linhas 8 à 13: com auxílio da biblioteca selenium, abrindo a página inicial da Amazon para o Brasil (https://www.amazon.com.br), procurando a barra de pesquisa, digitando “iPhone” na barra e clicando no botão pesquisar;
- Linhas 17 e 18: passando para o BeautifulSoup o conteúdo HTML da página em que o programa se encontra no momento;
- Linha 20: atribuindo à variável “tagsPai” uma lista onde cada item refere ao bloco de código referente a cada produto retornado pelo site;
- Linha 23: inicia o laço de repetição que para cada item dentro da lista “tagsPai” será efetuado os seguintes comandos;
- Linhas 24 e 25: atribuindo à variável “precoInt” o valor referente ao preço;
- Linhas 26 à 30: caso o valor recebido na variável “precoInt” não seja do tipo nulo será atribuído à variável “preco” os valores inteiro e fracionário do preço do produto concatenados. Caso o valor recebido na variável “precoInt” seja do tipo nulo o programa entende que o site não disponibiliza esta informação e atribui à variável “preco” o valor “Indeterminado”;
- Linhas 32 à 34: acha onde está o valor referente ao nome do produto, o capta e converte em uma string;
- Linha 36: adiciona à lista “produtos” um dicionário contendo o valor referente ao nome e o preço do produto;
- Linha 38: chama o método que cria a planilha com o nome de “iPhone_Amazon”.
Sobre o arquivo planilhas:
- Linhas 1 e 2: importa da biblioteca openpyxl os comando necessários;
- criaPlan (nomeArq, produtos): recebe como parâmetro um valor referente ao nome a ser dado à planilha e ao título e uma lista de dicionários que contenham os nomes dos produtos e seus respectivos valores. O método irá criar a planilha, suas linhas iniciais e chamará os demais métodos para adicionar os registros e estilizar a planilha;
- addProdutos (produtos, plan, linhaInicial): Recebe como parâmetro a lista de produtos, a referência da planilha em que serão adicionados os produtos e a linha de onde o método poderá inicial a adicionar os registros. Basicamente, a função do método é adicionar os valores referentes ao preço e o nome dos produtos na tabela;
- estiliza (planilha, celulas, estilo): recebe como parâmetro a referência da planilha que será modificada, uma lista com cada célula da planilha que será modificada e o tipo de estilo. O método estiliza as células da planilha (cor da fonte, espessura da fonte, cor de fundo da célula, e bordas), caso o valor referênte ao estilo seja 1 as células serão estilizadas como células de título, caso seja 2 as células serão estilizadas como células de valores.
- Primeiramente separei os registros de cada produto retornado pelo site, assim, notei que cada registro está em uma div com um atributo “data-component-type” com o valor “s-search-result” que foi o critério usado para separá-los:
- Uma vez que tenho cada registro separado e todos dentro de uma lista, apenas preciso de um loop que percorre cada item da lista para recuperar os dados;
- Para obter o nome do produto notei que esta informação está na única tag span dentro da primeira tag h2 dentro do registro:
- Para obter o preço do registros percebi que este valor estava dentro de uma tag spam com o valor “a-offscreen”:
- Outro caminho pode ser tomado ao perceber que o valor estava quebrado em dois (provavelmente por conta de estética da página), a parte em reais inteiros estava dentro de uma span com o valor de “a-price-whole” para a classe e a parte em centavos estava numa span com o valor de “a-price-fraction” para a classe.Portanto, seria necessário recuperar esses dois dados e os concatenar.
Além das condições já ditas sobre os itens a serem instalados no computador que irá executar o programa há mais uma condição para o bom funcionamento. Em algumas situações o site da Amazon pode redirecionar o programa para uma página inicial paralela (talvez por sobrecarga de acesso), neste caso o programa não conseguirá captar o endereço da barra de pesquisa uma vez que seus atributos e chave “xpah” mudaram. Abaixo uma imagem do layout da página inicial padrão da Amazon que o programa espera encontrar:
Outra situação que pode ocasionar mal funcionamento é caso já exista uma planilha com o nome “iPhone_Amazon”. Neste caso o programa não irá criar outra planilha e nem substituir a planilha existente.
- Python (de preferência, versão 3.8 ou superior);
- Selenium (versão mais recente até outubro de 2022);
- BeautifulSoup4
- Openpyxl (versão mais recente até setembro de 2022);
- Google Chrome;
- ChromeDriver referente à versão do Chrome.
-
Selecione a pasta que deseja baixar o projeto, abra a interface de linha de comando do Git e cole o seguinte código para clonar o projeto:
git clone https://github.com/KevinFGR/WebScraping.git
-
Abra a interface de linha de comando do seu computador na pasta webscraping e insira o seguinte comando para executar o programa:
py app.py
- Aguarde a execução do programa;
- Após o programa informar que a planilha foi criada você pode encontrá-la na pasta do projeto com o nome "iPhone_Amazon".