Sei sulla pagina 1di 5

22/06/2019 Web Scraping com bash - Liliana Sousa - Medium

Web Scraping com bash


Liliana Sousa Segue
17 de abril de 2018 · 4 minutos de leitura

. . .

Isso é legal?

Vamos começar por questionar a legalidade de fazer o web scraping.


Raspar a Web por si só não é ilegal, você é livre para salvar todos os
dados disponíveis na internet para o seu computador. A maneira como
você vai usar esses dados é o que pode ser ilegal. Então, por favor, leia
os termos e condições do site e certifique-se de não estar fazendo nada
ilegal :)

. . .

Quando e por que usar o bash?

Bem, boas ferramentas para web scraping são pagas. Se o site tiver um
HTML bastante simples, você poderá usar o curl facilmente para
executar a solicitação e, em seguida, extrair os valores necessários
usando os comandos bash grep , cut  , sed ,…

Como fazer isso

Abra a página da web que você deseja eliminar e, em seguida, exibir a


fonte da página.

Tente encontrar no código HTML os valores que você deseja extrair.


Alguns valores serão fáceis de obter porque estão em uma tag nomeada
específica, mas outros não. Vamos ver alguns exemplos.

// Enrole a página e salve o conteúdo em tmp_file


curl page.htm> tmp_file

// Todos os comandos abaixo terão como resultado "O conteúdo


que eu quero"

// Tag simples (dentro de outras tags)


// <ul class = "list"> <li class = "specific_class"> <span>
O conteúdo que eu quero </ span> </ li> <div> ...

cat tmp_file | grep "class = \" specific_class \ "" | cut -d


'>' -f4 | corte -d '<' -f1

// Conteúdo dentro de uma meta tag

https://medium.com/@LiliSousa/web-scraping-with-bash-690e4ee7f98d 1/5
22/06/2019 Web Scraping com bash - Liliana Sousa - Medium

// <meta property = "specific_property" content = "O


conteúdo que eu quero" />

cat tmp_file | grep specific_property | corte -d '"' -f4

// Se a tag desejada ocorrer mais de uma vez na saída


// <ul class = "list"> <li class = "specific_class"> <span>
O conteúdo que eu quero </ span> </ li> <div> ...
// <h1 class = "specific_class"> Eu não quero isso </ h1>
// Se você quiser a primeira ocorrência - use grep -m1
cat tmp_file | grep -m1 "class = \" specific_class \ "" |
cut -d '>' -f4 | cut -d '<' -f1
// Se você não sabe qual ocorrência é - tente grep por
alguma outra coisa
cat tmp_file | grep "class = \" specific_class \ "" | grep
span | cut -d '>' -f4 | corte -d '<' -f1

// Se tag e value não estiverem na mesma linha


// <h1 class = "specific_class">
// O conteúdo que eu quero
// </ h1>
cat tmp_file | grep -A1 "class = \" specific_class \ "" |
cauda -1

// Se a tag e o valor não estiverem na mesma linha e o


conteúdo for dividido por linhas
// <h1 class = "specific_class">
// O conteúdo
// eu quero
// </ h1>
cat tmp_file | grep -A2 "class = \" specific_class \ "" |
cauda -2 | sed 'N; s / \ n / /'

Se você quiser extrair dados de várias páginas com a mesma estrutura,


poderá adicionar o curl a algum tempo para todos os URLs. Imagine que
você está extraindo de um site que tem paginação e deseja extrair
dados de todas as páginas. Você poderia fazer o seguinte:

// Supondo que existam 20 páginas no site


n = "1"
enquanto [$ n -lt 20]
fazem
curl "page.htm? Pag = $ n"> tmp_file
...
n = $ [$ n + 1]
concluído

Vamos ver um exemplo completo e um script para extrair as


informações necessárias.

Queremos extrair informações de todos os livros existentes em um site


chamado https: //www.ebookslist.htm. Vamos supor que cada livro
possa ser acessado por param book e haja 100 no total.

Parte do html que contém as informações de que precisamos:

o tempo todo para que possamos realmente nos tornar pessoas


melhores e mais felizes. Durante décadas, nos disseram que o
pensamento positivo é a chave para uma vida feliz e rica. "F
** k positividade", diz Mark Manson. </ h1>

Queremos ter um arquivo CSV com "Data; Título; Autor; Descrição;


Preço; Envio" (escolhi o separador ";" como é mais provável que tenha
"," em todo o texto).

https://medium.com/@LiliSousa/web-scraping-with-bash-690e4ee7f98d 2/5
22/06/2019 Web Scraping com bash - Liliana Sousa - Medium

#! / bin / bash

n = "1"
rm -f tmp_file extractData.csv

// escreve cabeçalhos no arquivo CSV


echo "Data; Título; Autor; Descrição; Preço; Envio">
extractData.csv

enquanto [$ n -lt 100]


faz
// exec a curva e salva em tmp_file
curl "https: //www.ebookslist.htm? book = $ n"> tmp_file

// aumenta "book"
n = $ [$ n + 1]

// obter data
date = $ (cat tmp_file | grep date_added | cortar -d '"' -
f4)

// obter título
title = $ (cat tmp_file | grep "class = \" título \ "" |
cut -d '>' -f4 | cut -d '<' -f1)

// obter autor
author = $ (cat tmp_file | grep -A1 "class = \" author \
"" | tail -1)

// obter descrição
desc = $ (cat tmp_file | grep -A2 "class = \" descrição \
"" | tail -2 | sed 'N; s / \ n / /')

// obter preço
price = $ (cat tmp_file | grep "classe = \" preço \ "" |
grep span | corte -d '>' -f4 | cut -d '<' -f1)

// get
ship ship = $ (cat tmp_file | grep "class = \" envio \ ""
| cut -d '>' -f2 | cut -d '<' -f1)

// escreve os dados do livro no arquivo CSV


echo "$ date; $ title; $ autor; $ desc; $ price; $ ship"
>> extractData.csv

feito

Resultado de CSV para o exemplo de HTML:

Data; Título; Autor; Descrição; Preço; Envio


16/04/2017; A Arte Sutil de Não Dar um F * ck; Mark Manson e
Roger Wayne; # 1 New York Times Bestseller Mais de 2 milhões
de cópias vendidas Nesta geração definindo Guia de auto-
ajuda, um blogueiro superstar corta a porcaria para nos
mostrar como parar de tentar ser "positivo" o tempo todo
para que possamos realmente nos tornar pessoas melhores e
mais felizes. Durante décadas, nos disseram que o pensamento
positivo é a chave para uma vida feliz e rica. "F ** k
positividade", diz Mark Manson; 18 euros; Frete grátis

Importante : se você receber um “erro de sequência de byte ilegal”


(principalmente acontece no sed), adicione o seguinte ao seu script

export LC_CTYPE =
Exportar C LANG = C

https://medium.com/@LiliSousa/web-scraping-with-bash-690e4ee7f98d 3/5
22/06/2019 Web Scraping com bash - Liliana Sousa - Medium

https://medium.com/@LiliSousa/web-scraping-with-bash-690e4ee7f98d 4/5
22/06/2019 Web Scraping com bash - Liliana Sousa - Medium

https://medium.com/@LiliSousa/web-scraping-with-bash-690e4ee7f98d 5/5

Potrebbero piacerti anche