Blog

Postado em em 9 de setembro de 2021

Webscraping no Python com Scrapy – Busca de Dados na Web

Nessa aula eu vou te dar uma introdução sobre webscraping no Python com Scrapy para que você possa obter dados da web automaticamente!

Aulas disponíveis!

Aula 1 – Webscraping no Python com Scrapy – Busca de Dados na Web

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Resumo do Webscraping no Python

Nessa aula eu vou te mostrar como fazer webscraping com Python e sair do zero para começar a fazer suas automações na web.

Esse é um recurso muito útil para o mercado de trabalho, pois vai permitir com que você consiga obter diversas informações (de sua preferência) em pouco tempo e de forma automática!

O que vai aprender nessa aula:

Webscraping no Python com Scrapy

Você certamente já deve ter ouvido falar sobre Webscraping não é mesmo?

Se ainda não sabe o que é pode ficar tranquilo que nós vamos te explicar o que é e como você vai fazer isso com Scrapy no Python.

O webscraping nada mais é do que a obtenção de informações da web de forma automática, neste caso utilizando o Python.

Isso é muito útil principalmente no mercado de trabalho para facilitar a busca de diversas informações em um curto espaço de tempo!

Buscar Informações na Web com Python

Vamos partir para a nossa busca de informações na internet! Nessa aula nós vamos fazer a busca em um site de filmes para obter o nome do filme, ano e a nota que esse filme tem para que possamos gravar essas informações para utilizar posteriormente.

Lembrando que esse é apenas um exemplo, você vai poder depois utilizar o que aprendeu para buscar preços (comparar e acompanhar mudanças de preços), dados, informações, tabelas… o que precisar para o seu trabalho!

Essa busca que vamos fazer vai ser no site IMDb que faz essas análises dos filmes.

python 2

Então vamos ter um ranking com os filmes, ano do filme e a nota que foi dada ao filme.

Para você não se perder vou listar aqui os passos que vamos fazer para conseguir obter essas informações.

  1. Abrir a pasta do projeto;
  2. Criar um ambiente virtual no Python;
  3. Instalar os módulos;
  4. Abrir um projeto no Pycharm;
  5. Buscar as informações no IMDb;
  6. Criar o código.

Como você deve ter notado temos alguns passos antes de começar a criar o nosso código. Esses passos são essenciais para que o webscraping funcione corretamente.

1-ABRIR A PASTA DO PROJETO

Esse passo é bem simples e pode ser feito de várias maneiras. A maneira que vamos utilizar é o padrão de ir até o local desejado e criar uma pasta com o nome “filmesimdb”.

Outra maneira que você pode fazer é criar essa pasta com o prompt de comando.

Prompt de Comando

Para criar a pasta usando o prompt de comando vou utilizar o Anaconda Prompt, com ele podemos gerenciar os pacotes relacionados ao Python.

Neste caso estou usando o Windows, então você pode usar o comando CD para entrar em uma pasta se você souber exatamente as pastas que existem no meu comando.

Caso você não saiba, pode usar o comando DIR, esse comando permite que você olhe todas as pastas dentro do seu usuário.

(base) C:\Users\danie>dir

Feito isso todas as pastas serão mostradas, role até o final da tela.

python 3

Nosso objetivo é criar a pasta na Área de trabalho do computador, para isso vamos escrever na parte inferior >cd OneDrive e dê ok.

Observe que o nome da pasta que ia só até danie, agora vai até OneDrive, se colocarmos novamente o dir no final vamos conseguir ver todos os arquivos e pastas dentro desta, inclusive a área de trabalho.

python 4

Na última linha vamos agora completar com a área de trabalho

(base) C:\Users\danie\OneDrive>cd “Área de Trabalho”

Feito isso vamos criar uma pasta dentro da área de trabalho, para isso vamos completar o código:

(base) C:\Users\danie\OneDrive>cd “Área de Trabalho”>mkdir

O mkdir é uma pasta que cria um diretório (comando válido para o Windows)

Em seguida podemos colocar o nome da pasta

(base) C:\Users\danie\OneDrive>cd “Área de Trabalho”>mkdir filmesimdb

Se você fizer o teste e der mais um dir na área de trabalho essa pasta já irá aparecer para você!

Agora vamos entrar na pasta

(base) C:\Users\danie\OneDrive\Área de Trabalho>cd filmesimdb

(base) C:\Users\danie\OneDrive\Área de Trabalho\filmesimdb>

Feito isso podemos ir para o passo 2 e criar o ambiente virtual.

2-CRIAR UM AMBIENTE VIRTUAL NO PYTHON

Se você não souber como faz isso nós já temos um post aqui no blog que ensina o passo a passo para fazer a criação desse ambiente virtual.

Para acessar esse conteúdo basta clicar aqui e criar o seu ambiente virtual!

Um ambiente virtual nada mais é que uma espécie de computador que você cria dentro do seu computador mesmo, é um ambiente isolado que vai ter uma versão específica do Python e vai ter apenas as bibliotecas que você instalar dentro dele.

Isso é importante para que as bibliotecas e recursos que tenha no seu computador não afetem esse ambiente nem esse ambiente afete o que já tem no seu computador.

Você vai notar que para muitos projetos é necessário a criação desse ambiente até mesmo pela necessidade de uma versão específica do Python por conta da compatibilidade.

Então vale a pena aprender como criar ambiente virtual no Python para que você já possa utilizar também em outros projetos!

Aqui vamos criar um ambiente com o Python na versão 3.6. Vou passar um resumo dos códigos abaixo:

Código do ambiente virtual com Python

(base) C:\Users\danie\OneDrive\Área de Trabalho\filmesimdb>conda create -n filmesimdb250 python-3.6

Feito isso dê enter e vão se instalar alguns programas inclusive o Python como colocamos no código, quando terminar vamos ver no final a frase:

Proceed ([y]/n)?

Responda com Y de yes e de enter novamente

Agora vai aparecer instruções de como entrar e sair do ambiente virtual que acabamos de criar

To Activate this Environment, use (Para ativar este ambiente, use)

            $ conda active filmesimdb250

To deactivate na active Environment, use (Para desativar um Ambiente ativo, use)

            $ conda deactivate

Seguindo as instruções acima vamos ativar o ambiente:

(base) C:\Users\danie\OneDrive\Área de Trabalho\filmesimdb>conda active filmesimdb250

3-INSTARLAR OS MÓDULOS

Dentro desse ambiente criado nós vamos instalar a biblioteca do Scrapy utilizando o >pip install scrapy, para este projeto o Python e o Scrapy são suficientes.

4-ABRIR UM PROJETO NO PYCHARM

Feito isso nós vamos abrir o editor de Python PyCharm (mas você pode abrir outro editor de Python caso prefira).

python 5

Clique em New Project e escolha o a pasta que você criou para o projeto.

Selecione a opção Previously configured interpreter, feito isso, vamos em novo projeto e já vamos escolher a nossa pasta que criamos, se não estiver já selecionada, basta clicar no símbolo da pasta e escolher qual vamos utilizar.

Nessa parte, de utilizar um interpretador previamente configurado (que foi o ambiente virtual que criamos) se não aparecer o que acabamos de criar.

python 6

Basta clicar nos 3 pontos, selecionar Conda Environment e em Interpreter basta escolher o ambiente que acabamos de criar, que nesse caso é o filmesimdb250.

python 7

Depois basta dar OK e Create e nosso projeto estará criado!

python 8

5-BUSCAR INFORMAÇÕES NO IMDB

Com esse novo projeto aberto, vamos até o terminal do PyCharm, que fica no canto inferior esquerdo e vamos escrever: scrapy startproject imdb250

Que é para criarmos um projeto no scrapy, nesse caso o nome desse projeto é imdb250 (pode colocar o nome que desejar).

Ao terminar você vai ver que o próprio PyCharm te dá a sugestão de escrever cd imdb250 para que você inicie o seu spider (já vamos falar sobre isso).

Feito isso vamos inserir mais um código no terminal que é scrapy genspider imdb imdb.com

Esse código é para que possamos criar esse spider, que nada mais é do que um arquivo que vai fazer uma função específica, no nosso caso vai puxar informações da web.

Então vamos gerar esse spider com o nome de imdb no site imdb.com.

python 9

Você pode notar que esse arquivo foi criado dentro da nossa pasta, e claro, você pode verificar os códigos que ele já traz como padrão para te auxiliar como importar o scrapy, a classe de spider já criada para pegar informações.

import scrapy

class ImdbSpider(scrapy.Spider):

    name = 'imdb'

    allowed_domains = ['imdb.com']

    start_urls = ['http://imdb.com/']

def parse(self, response):

    pass

OBS: Nessa aula nós não vamos utilizar o conteúdo da linha 6 que é o allowed_domains, então você pode excluir essa linha.

Agora para podermos testar o nosso código em um ambiente de teste dentro do Power BI, nós vamos utilizar o código scrapy shell (ainda dentro do terminal). Este ambiente de teste é um ambiente controlado que não interfere nas outras programações, ao entrar neste ambiente vamos ver no terminal o sinal de >>>.

>>> Fetch(‘https://www.imdb.com/chart/top/?ref_=nv_mv_250’)

Outro código que vamos escrever é o fetch(‘nome do site’) e o nome do site onde vamos obter essas informações para que possamos fazer a ligação entre o site e o nosso ambiente de testes.

Se ocorrer tudo certo com esse procedimento você deverá receber a seguinte mensagem com o número 200, se aparecer 400 então pode haver um erro de conexão.

python 11

Com isso nós vamos poder começar a obter informações desse site, mas é importante eu te mostrar um outro passo antes para que você tenha uma noção de como vamos obter essas informações de um site.

Nós já abordamos um pouco desse assunto quando falamos de automação web, então se quiser dar uma olhada nesse post também vai te auxiliar a entender melhor essa parte.

O que vamos fazer para verificar as informações de um site é clicar com o botão direito em qualquer parte do site e selecionar a opção Inspecionar.

python 12

Aqui você vai ver que foi aberto um caixa de código, onde vai passando o mouse e na tela vai ver o realce do que aquele código está se referenciando.

Lembrando que isso pode mudar um pouco de navegador para navegador, mas esses códigos do site vão ser os mesmos, pois é a estrutura do site.

Essa parte realmente é um pouco mais complexa, pois esses códigos não são em Python, então pode ser que você tenha alguma dificuldade em entender certas partes.

Nesse caso nós podemos utilizar uma extensão do Google Chrome chamada SelectorGadget, que vai ter essa mesma função do inspecionar, só que de forma mais fácil.

No exemplo abaixo quando fazemos uma seleção você vai conseguir conferir se de fato o que selecionou é o que precisa.

python 13

Então quando utilizamos essa extensão e clicamos em um elemento, ele vai mostrar todos os outros que tem a mesma estrutura, então vamos poder confirmar que a seleção está correta.

Nesse caso você vai notar que essa estrutura .titleColumn nós temos na ferramenta de inspecionar, mas aqui é mais fácil identificar ela.

Essa estrutura já vai nos fornecer o nome do filme + o ano desse filme, mas ainda temos que verificar como vamos buscar a nota do filme.

Abaixo vou colocar algumas informações importantes que vamos utilizar, mas que você pode testar utilizando o SelectorGadget.

Lembrando que ao selecionar uma informação você pode clicar em informações que não estejam relacionadas para poder desmarcar e deixar somente o que você precisa. As informações que estão fora da sua busca você pode clicar e excluir quando estiverem contornadas de vermelho.

python 14
  • .titleColumn – Pega caixa com nome do filme e ano;
  • .titleColumn a – Pega apenas o nome do filme;
  • .secondaryInfo – Pega apenas o ano do filme;
  • Strong – Avaliação do filme.

IMPORTANTE: Esse site é relativamente simples de pegar essas informações com essa extensão, então vai fazer sua seleção, sabendo que já temos uma lista de 250 filmes se a sua seleção for maior do que isso vai buscar o que está em amarelo que não faz parte e vai clicar para desmarcar até que fique a quantidade correta de dados.  Depois basta anotar o nome da estrutura para podermos utilizar dentro do shell.

Agora podemos voltar ao terminal e interagir com o site usando essas estruturas. Vamos interagir usando a lógica de perguntas e respostas do tipo:

Qual será a resposta se eu colocar a estrutura .titleColumn? Por exemplo:

>>>response.(‘ .titleColumn’).get()
python 15

Você vai ver que com esse comando nós vamos conseguir pegar a caixa com a informação do nome do filme e o ano dele.

Com esse código nós vamos ter apenas um único filme, pois o get() vai pegar apenas a primeira ocorrência, então podemos utilizar o getall() para pegar os 250 filmes.

Agora você pode ir testando com as outras estruturas para verificar se o resultado está correto, evitando de ficar rodando o código inteiro sempre que for fazer um teste.

Como pegar somente o nome do filme e descartar as outras informações que estão vindo junto na busca?

Para isso podemos fazer um ajuste no código colocando (::), observe:

>>> response.css(‘.titleColumn a::text’).get()

‘the Shawshank Redemption’

>>> response.css(‘.titleColumn a::text’).getall()

Fazendo desta forma vamos isolar a informação e o retorno será somente dos nomes dos filmes. Podemos também atribuir essa lista com os nomes dos filmes em uma variável:

>>> titulos = response.css(‘.titleColumn a::text’)

Dessa forma a variável títulos para a valer a lista com os nomes dos filmes, você pode conferir o tamanho da lista usando o len antes de tirar do ambiente virtual e levar para o seu código.

Vamos fazer isso para todos os parâmetros que pegamos no site, vamos filtrar, selecionar e colocar em uma variável como acabamos de fazer, feito isso colocamos as variáveis no nosso site e podemos sair do ambiente virtual:

import scrapy

class imdbSpider(scrapy.Spider):

    name = 'imdb'

    start_urls = ['http://imdb.com/']

   def parse(self, response):

      filmes = response.css('.titleColumn')

      titulos = response.css('.titleColumn a::text')

      anos = response.css('.secondaryinfo ::text')

      nota = response.css('strong::text')

      pass

IMPORTANTE: Lembrando que para sair desse ambiente de testes no terminal você terá que escrever quit() dentro do terminal.

6-CRIAR O CÓDIGO EM PYTHON

Essa parte é mais tranquila, pois agora temos os comandos e vamos precisar apenas organizar um pouco a estrutura do código que já temos para obter as informações dos filmes.

import scrapy

class ImdbSpider(scrapy.Spider):

    name = 'imdb'

    start_urls = ['https://www.imdb.com/chart/top/?ref_=nv_mv_250']

    def parse(self, response):

        for filmes in response.css('.titleColumn'):

            yield{

                'titulo': filmes.css('.titleColumn a::text').get(),

                'ano': filmes.css('.secondaryInfo ::text').get()[1:-1],

                'nota': response.css('strong::text').get()

            }

Aqui você deve lembrar que nós já tínhamos boa parte escrita, só modificamos o site que vamos pegar as informações, adicionamos uma estrutura de repetição For para pegar as informações no bloco do titleColumn que é onde temos o nome e o ano do filme.

Por esse motivo já alteramos os códigos de título e ano para filmes.css, pois vamos obter as informações desse bloco.

OBS: Você vai notar que dentro desses comandos acrescentamos o ::text, isso é para que possamos pegar o texto específico que queremos, pois, ao testar você vai notar que essa resposta nos traz mais de um resultado.

Agora para finalizar e rodar o código nós vamos utilizar o seguinte comando no terminal: scrapy crawl imdb -O imdb.json ou caso preferir pode salvar em csv mudando apenas a última parte scrapy crawl imdb -O imdb.csv

OBS: Esse -O (letra o maiúscula) serve para criarmos esse arquivo e sempre sobrepor as informações, caso coloque minúscula ele vai sempre adicionando as informações ao arquivo.

python 1

Na mesma pasta você vai observar os 2 arquivos em json e csv com as informações desses filmes que conseguimos extrair do site.

Veja que está com o nome, ano e nota do filme exatamente como criamos no código. Então agora é praticar, pois é importante que entenda cada etapa para poder reproduzir em outros sites para buscar outras informações.

Voltar ao índice

Aula 2 – Webscraping de 1000 Páginas no Python com Scrapy

Nessa aula eu quero te mostrar como fazer webscraping de 1000 páginas no Python com Scrapy para aumentar sua produtividade!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Resumo

Nessa aula eu vou te ensinar a buscar dados da web com Python para que você possa automatizar o processo de busca e facilitar bastante esse trabalho.

O nosso exemplo da aula é para fazer uma busca em mais de 1000 páginas de um site para pegar as informações.

Já imaginou fazer isso em 10 min sendo que você poderia demorar dias para obter todas essas informações?

Webscraping de 1000 Página no Python

Você já deve ter ouvido falar sobre webscraping ou como fazer webscraping no Python não é mesmo?

Hoje eu quero te mostrar como fazer webscraping automático no Python em mais de 1000 páginas da web, isso mesmo mais de mil páginas!

A ideia é facilitar seu trabalho ao pegar dados da web com Python, dessa forma fica muito mais fácil e você ganha muito mais produtividade.

Como Buscar Dados da Web com Python

Nós já temos aqui no canal um post sobre esse assunto utilizando a biblioteca scrapy então você pode ver ele também para complementar o seu conhecimento!

Essa busca de dados na web é muito importante para o mercado de trabalho com Python, pois você vai ganhar uma produtividade muito grande com esse tipo de busca.

Vai fazer um trabalho de dias ou horas em alguns minutos, já imaginou isso? Você com certeza ganharia um reconhecimento na sua empresa por otimizar esses trabalhos!

O nosso exemplo de hoje vai ser no site abaixo que mostra um ranking de jogos de tabuleiro com o nome e a nota de cada um deles.

https://boardgamegeek.com/browse/boardgame

Site para buscar os jogos de tabuleiro
Site para buscar os jogos de tabuleiro

Se você observar vai ver que temos vários jogos em uma página, mas temos no total 1305 páginas com jogos de tabuleiro.

Já imaginou você pegando todas essas informações de forma manual? Seria muito trabalhoso e iria tomar muito tempo.

É por isso que vamos usar o webscraping no Python usando a biblioteca Scrapy.

O primeiro passo é instalar a biblioteca scrapy, para isso basta escrever no terminal pip install scrapy.

OBS: Vale lembrar que para esse projeto nós vamos utilizar o PyCharm, então se você ainda não tem instalado basta clicar aqui para poder ir ao nosso post e ver o passo a passo de instalação.

Feita a instalação da biblioteca nós vamos utilizar o código scrapy startproject jogodetabuleiro. Onde esse nome é o nome que você vai dar ao seu projeto.

Após criar o projeto o próprio programa vai mostrar o comando para entrar na pasta que é cd jogodetabuleiro. Que é um comando comum para que utiliza o prompt com frequência para navegar entre as pastas do computador.

Entrando na pasta criada
Entrando na pasta criada

Aqui você vai ver que vai passar da pasta jogos para jogodetabuleiro que foi o que criamos.

Criando um "spider" para obter os dados
Criando um “spider” para obter os dados

No próximo passo vamos utilizar o comando scrapy genspider “nome” “site”. Assim vamos dar um nome ao nosso spider, que nada mais é do que uma ferramenta que vai buscar os dados que queremos.

Webscraping de 1000 páginas
Arquivo criado com um código já iniciado

Você vai notar que temos uma pasta criada (spiders) e um arquivo jogos.py já com um prévio código pronto. (Vamos excluir a coluna iniciada com allowed_domains, pois não será necessária).

Na parte de start_urls nós vamos colocar o site completo que vamos utilizar para pegar as informações que está abaixo:

https://boardgamegeek.com/browse/boardgame/page/1

Webscraping de 1000 páginas
Código para busca de informações em uma única página

Aqui vamos inserir algumas linhas de código para poder buscar as informações no site, então vamos buscar o rank, nome e a avaliação de cada um desses jogos.

OBS: Logo ao final da linha de avaliação está escrito .split()[0], pois não ficou muito visível na imagem.

Para poder rodar esse código e verificar se está tudo funcionando normalmente podemos utilizar o código abaixo dentro do terminal.

Código para rodar o programa
Código para rodar o programa

Com esse código já vamos conseguir gerar um arquivo em CSV para visualizar os resultados.

Webscraping de 1000 páginas
Resultado do programa com 100 resultados

Nesse caso vamos ter um arquivo com 100 resultados que são todos os jogos que temos na primeira página.

Agora nós vamos acrescentar mais algumas linhas de códigos para que possamos passar de página e pegar as informações de todas as páginas.

Webscraping de 1000 páginas
Código para fazer as buscas em todas as páginas do site

Agora nós vamos rodar o código novamente através do terminal.

Código para rodar o programa novamente (aqui vai demorar um pouco mais)
Código para rodar o programa novamente (aqui vai demorar um pouco mais)

Vale lembrar que agora o código vai demorar um pouco para rodar, pois são mais de 1000 páginas.

Então é possível demorar alguns minutos, mas no final você vai ter um arquivo com todas as informações do site contendo rank, nome e nota de cada um dos jogos.

Voltar ao índice

Conclusão – Webscraping no Python

Nessa aula eu consegui te mostrar uma parte inicial de Scrapy para que você possa fazer sua primeira busca com webscraping no Python e automatizar seus trabalhos!

Isso quer dizer que vai poder criar o código em Python para buscar informações em sites sem ter que fazer isso de forma manual.

Você já pensou quanto tempo levaria para ter que obter todas essas informações manualmente? Seriam 750 informações no total, pois temos nome, ano e nota. Já imaginou isso tudo de forma manual?

E olha que essa nem é uma quantidade grande de informações, mas veja como foi feito de forma rápida.

Agora é praticar para poder fazer suas próprias aplicações de webscraping no Python e ganhar produtividade nos seus trabalhos.

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer ter acesso a um Minicurso de Finanças no Excel de forma 100% gratuita? Preencha seu e-mail abaixo!