1 of 29

Web Scraping com Python

Novembro/2017 - UFF Praia Vermelha

Ministrado por Paula Grangeiro

2 of 29

O que é Web Scraping?

  • Também conhecido como Raspagem de Dados.
  • É uma técnica para extrair dados de websites.
  • Varrer conteúdo e capturar informações relevantes.
  • Possui diversas aplicações:
    • Monitoramento de preços.
    • Ofertas de promoções.
    • Cotações de ações.
  • É o primeiro passo para a Análise de Dados (Ciência de Dados).

3 of 29

4 of 29

Desafios do Web Scraping

  • Nem sempre esses dados são estruturados
  • Alguns sistemas impõem barreiras:
    • Captchas
    • Bloqueio de IP
    • Dados dinâmicos (JavaScript)

5 of 29

Web Scraping vs. Web Crawling

  • Extração de dados
  • Automatização da extração dos dados

6 of 29

Scrapy

  • Framework para web crawling.
  • Dados crawleados disponibilizados em diferentes formatos.

7 of 29

Code Time!

8 of 29

Criando o nosso projeto

  1. Instalar Python 3
  2. Instalar Scrapy 1.4
  3. Executar o comando para iniciar o projeto

scrapy startproject <nome do projeto>

9 of 29

Criando nosso primeiro Spider

  • São os crawlers em si

  1. Executar o comando para criar um Spider para crawlear o endereço quotes.toscrape.com

scrapy genspider <nome do spider> <url a ser crawleada>

10 of 29

Criando nosso primeiro Spider

11 of 29

Executando um Spider

  1. Executar o comando:

scrapy crawl <nome do spider>

12 of 29

13 of 29

Code Time!

14 of 29

Programando o nosso Spider

  1. Abrir o arquivo do spider first
  2. Modificar variável start_url
  3. Implementar método parse
  4. Rodar nosso spider novamente

15 of 29

Analisando o conteúdo a ser crawleado

Como capturar somente os dados relevantes?

16 of 29

17 of 29

Analisando o conteúdo a ser crawleado

18 of 29

Analisando o conteúdo a ser crawleado

  1. Executar o comando para abrir o shell interativo do Scrapy

scrapy shell <url a ser crawleada>

19 of 29

Alguns “macetes” do shell

  • response.css(‘selector’)
    • Retorna um seletor
  • response.css('selector::text')
    • Retorna o texto do selector
  • response.css('selector').extract_first()
    • Retorna o primeiro seletor em formato texto
  • response.css('selector').extract()
    • Retorna o seletor em formato texto

20 of 29

21 of 29

Code Time!

22 of 29

Programando o nosso Spider

  • Modificar o spider para pegar as informações de frase, autor e tags
  • Retornar uma lista de dicionários com os dados capturados
  • Rodar nosso spider novamente
  • Dica: Utilize o shell para verificar os dados a serem coletados

(Resolução no próximo slide)

23 of 29

Programando o nosso Spider

24 of 29

Armazenando dados em arquivos

  1. Executar o comando:

scrapy crawl <nome do spider> -o <nome do arquivo>

  • Formatos suportados:
    • JSON
    • JSON Lines
    • XML
    • CSV

25 of 29

Automatizando navegação

  1. Modificar variável start_urls
  2. Modificar método parse para:
    1. Depois de coletar todos os autores da página atual
    2. Verificar se existem links para a próxima página
    3. Se existir próxima página, seguir para a próxima com o seguinte comando ao lado.
  3. Executar o nosso spider e armazenar os dados capturados em um arquivo.json

(Resolução no próximo slide)

response.follow(elemento, callback)

Onde:

  • elemento é o próximo link
  • callback é a função a ser chamada com a próxima página

26 of 29

Automatizando navegação

27 of 29

Login

  1. Criar um novo spider
  2. Modificar o spider conforme o exemplo ao lado
  3. Implementar método parse_logged_in
    1. Pegar as informações de frase, autor, tags e link para o Goodreads
  4. Executar o novo spider

28 of 29

Próximos passos?

  • Clonar o repositório deste workshop:
  • Ler a documentação do Scrapy:
  • Aprender sobre leitura de Captchas!
  • Deployar seu Spider no Scrapinghub!
  • Se integrar a comunidade Python!
    • PythonRio
    • PyLadies Rio
  • Compartilhar o conteúdo deste workshop <3

29 of 29

Obrigada <3