Web Scraping com Python: Uma Introdução ao Requests e Scrapy

O scraping de dados é um processo automatizado para coletar enformações da web seguindo regras específicas. Em Python, existem várias bilbiotecas que facilitam essa tarefa, como Requests para requisições HTTP e Scrapy para extração estruturada de dados.

Utilizando a Biblioteca Requests

A biblioteca requests simplifica significativamente a realização de requisições HTTP em Python. Abaixo está um exemplo de como realizar requisições GET e POST:

import requests

# Requisição GET
resposta = requests.get('https://api.github.com/events')
print(resposta.status_code)
print(resposta.json())

# Requisição POST com dados JSON
dados = {'username': 'exemplo', 'senha': '123456'}
headers = {'Content-Type': 'application/json'}
resposta = requests.post('https://httpbin.org/post', json=dados, headers=headers)
print(resposta.text)

A biblioteca permite também a manipulação de cookies, autenticação e proxy, sendo uma alternativa mais moderna e fácil de usar em comparação com módulos padrão como urllib2.

Framework Scrapy

Scrapy é um framework poderoso para coleta de dados em larga escala. Ele possui uma arquitetura baseada em componentes que inclui:

  • Motor: Gerencia o fluxo de dados entre os componentes
  • Agendador: Controla a fila de URLs a serem visitadas
  • Downloader: Responsável por baixar páginas web
  • Spiders: Define as regras de extração de dados
  • Pipelines: Processa e armazena os dados coletados
  • Middlewares: Extensões para modificar requisições/respostas
import scrapy

class ExemploSpider(scrapy.Spider):
    name = 'exemplo'
    start_urls = ['http://www.exemplo.com/lista']
    
    def parse(self, response):
        for item in response.css('div.produtos'):
            yield {
                'nome': item.css('h2::text').get(),
                'preco': item.css('span.preco::text').get()
            }
            
        proximas_paginas = response.css('a.paginacao::attr(href)').getall()
        for pagina in proximas_paginas:
            yield response.follow(pagina, self.parse)

Para usar o Scrapy, primeiro crie um projeto com scrapy startproject nome_projeto, depois defina as regras de coleta nos arquivos de spiders. O framework também permite configurações avançadas como limites de profundidade, controle de concorrência e persistência de dados.

Seletores e Processamento de Dados

Scrapy suporta seletores CSS e XPath para extrair informações. Exemplo de uso com XPath:

from scrapy.selector import Selector

html = '- Item 1
- Item 2'
seletor = Selector(text=html)
itens = seletor.xpath('//li[@class="item"]/text()').getall()
print(itens)  # ['Item 1', 'Item 2']

Para manipular cookies, pode-se usar:

from scrapy.http.cookies import CookieJar

cookie_jar = CookieJar()
cookie_jar.extract_cookies(response, request)
print(cookie_jar._cookies)

Mais detalhes sobre seletores e funcionalidades podem ser encontrados na documentação oficial: https://docs.scrapy.org/en/latest/

Tags: Requests Scrapy Python web-scraping HTTP

Publicado em 8-5 11:41