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/