Web Scraping com Ruby: Aprenda a extrair dados de sites de forma fácil e rápida

Nesse tutorial você vai aprender como Realizar um Web Scraping com Ruby através de um passo a passo simples usando a Gem Mechanize.

Web Scraping é o ato de extrair informações de um site automaticamente (através de um script), essa técnica pode ser usada por exemplo para criar um site que compara preços de produtos, realizar analises de marketing, encontrar possíveis clientes entre infinitas possibilidades.

Então é realmente importante que você aprenda como realizar um Web Scraping e usando o Ruby e a Gem Mechanize (que facilita a interação com o site alvo) fica realmente muito fácil fazer isso.

Então bora aprender o/

 

O que vamos desenvolver?

Nesse tutorial nós vamos criar um Web Scraping com Ruby que vai logar em um site, baixar a lista de produtos de todas as páginas disponíveis e depois armazena-la em uma arquivo local.

Para isso nós vamos usar um site simples de exemplo, mas você pode usar as mesmas técnicas para baixar informações e interagir com qualquer site na Web.

 

Web Scraping R

 

Passo a Passo

Agora vamos começar o desenvolvimento do nosso Web Scraping de exemplo, lembrando que você pode adaptar esse exemplo para interagir com outros sites 🙂

 

Preparando o site de exemplo

Para começar, você deve clonar o site de exemplo que eu preparei, instalar as Gems dele, criar o banco de dados, e rodar os seeds para incluir os produtos.

  1. Clone o projeto rodando:

  2. Entre na pasta:

  3. Instale as Gems:

  4. Crie o banco de dados e insira os produtos nele:

  5. Suba o projeto rodando:

  6. Interaja com o projeto no browser para ficar mais claro como será a navegação do Web Scraping.

 

 

Preparando a base do nosso Web Scraping com Ruby

Vamos iniciar o desenvolvimento do nosso pequeno Web Scraping criando um Gemfile, incluindo a gem Mechanize e realizando a primeira interação com o site alvo.

  1. Em um outro console, rode:

  2. Entre na pasta rodando:

  3. Crie um Gemfile rodando:

  4. Coloque no seu Gemfile:

  5. Instale a gem rodando:

  6. Crie o arquivo principal do projeto rodando:

  7. Para podermos usar a Gem mechanize, inclua nele:

  8. Crie um Agent (Objeto que usaremos para interagir com a página) incluindo no arquivo:

  9. Baixe as informações da página incluindo no arquivo:

  10. Para imprimirmos o resultado, inclua também:

  11. Para rodar o script:

  12. Pronto, o resultado deve ser algo como:

 

Realizando o Login

Agora vamos aprender como realizar o Login através da gem mechanize, lembrando, você pode usar essa mesma técnica para submeter qualquer form de uma página.

  1. Para selecionar o Form da página, inclua no seu arquivo:

    Obs: Caso exista mais de um form, você pode selecionar pelo name: google_form = page.form(‘f’)

  2. Para preencher o campo de email e o campo de senha com os dados corretos coloque:

  3. Para submeter o form e pegar a página de resultado, coloque:

  4. Pronto, seu arquivo deve estar dessa forma:

     

Baixando as informações e exibindo na tela

Vamos agora baixar as informações dos produtos da primeira página e exibir da tela um por um, para isso vamos precisar pegar os elementos da tabela onde os produtos se encontram e depois pegar cada uma das colunas.

  1. Na nossa página os produtos são renderizados da seguinte maneira:

  2. Então para selecionarmos a tabela da nossa página, podemos procurar pela Tag HTML tbody, e para pegar cada um dos produtos podemos fazer um looping no resultado do tbody para pegar cada uma das Tags HTML tr, então coloque no seu arquivo:

  3. Agora para pegarmos o array de colunas, podemos selecionar a Tag HTML td, então dentro do looping inclua:

  4. Agora para exibirmos inclua a baixo da linha incluida anteriormente ainda dentro do looping:

  5. Seu arquivo deve ter ficado dessa forma:

  6. Para executar, rode:

  7. O resultado deve ter sido semelhante a este:

 

Navegando pelas páginas e extraindo os produtos

Nosso site de exemplo divide o resultado em várias páginas, então nós vamos navegar pelas páginas disponíveis pegando todos os produtos.

  1. Para realizarmos essa navegação entre N páginas, nós vamos precisar incluir um looping em volta do looping que já tinhamos (que pega os elementos da Tag HTML tr). Nesse looping vamos observar se existe uma próxima página ou se já estamos na última, caso exista nele vamos “clicar” para mudar de página assim que extrairmos o resultado dela.

    Então em volta de:

    Inclua:

  2. Agora para que o looping pare quando acabarem as páginas, inclua no final dele:

    Obs: Nós estamos olhando na página (que está dentro de product_list_page) se existe um link com o text ‘Next ›’ (que é o resposável por passar de página).

  3. Para mudarmos de página quando existir uma próxima, coloque depois da linha anterior mas ainda dentro do looping:

    Obs: Estamos selecionando o link e clicando nele com o .click e depois colocando a nova página na mesma variável da anterior (atualizando a página)

  4. Seu arquivo deve ter ficado assim:

  5. Para executar, rode:

  6. Seu resultado deve ser algo semelhante:

 

Escrevendo o resultado em um arquivo externo

Nossa missão principal já foi concluida, agora apenas para complementar vamos escrever o resultado do nosso scraping em um arquivo externo .txt

  1. Antes dos loopings inclua:

    Obs: Estamos criando um novo arquivo e incluindo um título nele

  2. Dentro do looping mais interno substitua:

    Por:

  3. Depois dos loopings inclua:

  4. Seu arquivo completo deve ter ficado assim:

  5. Para executar, rode:

  6. Pronto, verifique na mesma pasta do seu arquivo se existe um arquivo chamado product_list.txt, dentro dele você vai encontrar a mesma lista que foi impressa anteriormente o/

 

Desafio de fixação

Para fixar o que foi aprendido nesse tutorial eu proponho que você realize o seguinte desafio:

“Crie um novo arquivo de scraping que: Realize o login, depois click em Edit no primeiro produto, preencha o form para atualizar o registro mudando o name do produto para ‘OneBitCode’ e depois submeta esse form garantindo que a atualização funcionou”

 

Conclusão

Nesse Tutorial você aprendeu do zero como interagir com sites (realizando login, baixando informações e navegando) através de um script Ruby usando a gem Mechanize.

Para saber mais sobre os comandos da Gem Mechanize acesse: http://docs.seattlerb.org/mechanize/GUIDE_rdoc.html

Não deixe de fazer o desafio proposto, para fixar bem um conhecimento é necessário utiliza-lo 🙂

Se você curtiu esse tutorial e quer ver mais conteúdos por aqui nos ajude compartilhando esse link com outros programadores e comunidades, isso faz a diferença de verdade.

Muito obrigado por estar com a gente,
Grande abraço o/

Leonardo Scorza

 



12 formas de vencer o bloqueio criativo e escrever textos memoráveis (e 6 dicas extras)

Não perca nenhum conteúdo

Receba nosso resumo semanal com os novos posts, cursos, talks e vagas \o/




Você é novo por aqui?

Primeira vez no OneBitCode? Curtiu esse conteúdo? O OneBitCode tem muito mais para você!

O OneBitCode traz conteúdos de qualidade e em português sobre programação com foco em Ruby on Rails e outras tecnologias como Angular, Ionic, React, desenvolvimento de Chatbots e etc.

Se você deseja aprender mais, de uma forma natural e dentro de uma comunidade ativa, visite nosso Facebook e nosso Twitter, veja os screencasts e talks no Youtube, alguns acontecimentos no Instagram, ouça os Podcasts e faça parte de nossa Newsletter.

Além disso, também estamos com alguns e-Books muito interessantes para quem deseja se aprimorar como programador e também como freelancer (os e-Books são gratuitos!):

Espero que curta nossos conteúdos e sempre que precisar de ajuda com os tutoriais, fala com a gente! Seja por Facebook ou e-mail, estamos aqui para você 🙂

Bem-vindo à família OneBitCode \o/

setembro 30, 2019

3
Deixe um comentário

avatar
2 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Leonardo ScorzaJonatas Moreiracharliedeus Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
charliedeus
Visitante
charliedeus

Muito bom, Leo… Estava precisando conhecer essa gem…
Por favor, se me permite, traga nos próximos posts a leitura de PDF’s e Imagens… Seria igualmente enriquecedor!

Grande abraço e sucesso!

Jonatas Moreira
Membro
Jonatas Moreira

Show(comecei a utilizar essa palavra por sua causa) ! Estou acabando um outro curso aqui da plataforma, depois vou fazer esse!
Parabéns e muito grato Leo, suas publicações são TOP!

Feito com s2 por OneBitCode
%d blogueiros gostam disto: