A rotação de IP usando proxies é essencial no scraping de dados, especialmente ao lidar com sites modernos que podem impor restrições. Distribuir suas solicitações entre vários endereços IP é fundamental para evitar bloqueios ou limitações de taxa. Rotacionar endereços IP dificulta que os sites rastreiem e restrinjam sua atividade de scraping. Isso aumenta a eficiência e a confiabilidade do seu processo de scraping de dados, permitindo extrair informações com mais eficácia. Usar proxies e rotacionar endereços IP durante o scraping de dados permite evitar bloqueios baseados em IP, superar limites de taxa e acessar conteúdo com restrição geográfica.
Este artigo explica como implementar proxies no seu fluxo de scraping de dados para rotacionar os endereços IP utilizados. Você vai descobrir onde obter proxies eficazes, quais são as dicas para rotação de IP e como evitar ser bloqueado pelo site alvo.
Rotação de IP com Python
Um processo de scraping comum com Python geralmente utiliza uma biblioteca Python como Requests ou Scrapy para acessar um site e analisar seu conteúdo. Você pode filtrar o conteúdo do site para extrair as informações desejadas. A seguir, um exemplo de um processo de scraping típico:
import requests
url = 'http://example.com'
# Make requests
response = requests.get(url)
print(response.text)
Esse processo obtém as informações necessárias e é adequado para casos de uso único ou situações em que você precisa extrair dados apenas uma vez. No entanto, ele usa o IP do seu sistema para fazer solicitações e pode enfrentar problemas com requisições repetidas ou contínuas, onde o site limita o acesso ao longo do tempo.
Os resultados do processo de scraping de exemplo são os seguintes:
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
body {
background-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans",
…
A maioria das bibliotecas Python, como Requests ou Scrapy, voltadas para scraping ou requisições web, oferece uma forma de alternar o endereço IP usado nessas requisições. No entanto, para aproveitar isso, você precisa de uma lista ou fonte de endereços IP válidos. Essas fontes podem ser gratuitas ou comerciais, como os proxies da Bright Data.
As opções comerciais garantem validade e fornecem ferramentas úteis para gerenciar e rotacionar seus proxies, assegurando que não haja interrupções no seu processo de scraping. Por exemplo, a Bright Data oferece diversas categorias de proxies com preços diferenciados com base no caso de uso, na escalabilidade e na garantia de acesso desbloqueado aos dados solicitados:

Usando proxies gratuitos, você pode criar uma lista em Python contendo proxies válidos para rotacionar durante o seu processo de scraping:
proxies = ["103.155.217.1:41317", "47.91.56.120:8080", "103.141.143.102:41516", "167.114.96.13:9300", "103.83.232.122:80"]
Com isso, você precisa apenas de um mecanismo de rotação que selecione diferentes endereços IP da lista a cada requisição. Em Python, isso seria semelhante à seguinte função:
import random
import requests
def scraping_request(url):
ip = random.randrange(0, len(proxies))
ips = {"http": proxies[ip], "https": proxies[ip]}
response = requests.get(url, proxies=ips)
print(f"Proxy currently being used: {ips['https']}")
return response.text
Este código seleciona um Proxy aleatório da sua lista cada vez que é chamado. O Proxy é usado nas requisições de scraping.
Incluir um caso de erro para lidar com proxies inválidos resultaria no código de scraping completo com a seguinte aparência:
import random
import requests
proxies = ["103.155.217.1:41317", "47.91.56.120:8080", "103.141.143.102:41516", "167.114.96.13:9300", "103.83.232.122:80"]
def scraping_request(url):
ip = random.choice(proxies)
try:
response = requests.get(url, proxies={"http": ip, "https": ip})
if response.status_code == 200:
print(f"Proxy currently being used: {ip}")
ip = random.randrange(0, len(proxies))
ips = {"http": proxies[ip], "https": proxies[ip]}
response = requests.get(url, proxies=ips)
try:
if response.status_code == 200:
print(f"Proxy currently being used: {ips['https']}")
print(response.text)
elif response.status_code == 403:
print("Forbidden client")
elif response.status_code == 429:
print("Too many requests")
except Exception as e:
print(f"An unexpected error occurred: {e}")
scraping_request("http://example.com")
Você também pode usar essa lista rotativa de proxies para realizar suas requisições com qualquer outro framework de scraping, como o Scrapy.
Scraping com Scrapy
Com o Scrapy, você precisa instalar a biblioteca e criar os artefatos de projeto necessários antes de realizar o crawling da web com sucesso.
Você pode instalar o Scrapy usando o gerenciador de pacotes pip no seu ambiente com Python habilitado:
pip install Scrapy
Após a instalação, você pode gerar um projeto Scrapy com alguns arquivos de template no seu diretório atual usando os seguintes comandos:
scrapy startproject sampleproject
cd sampleproject
scrapy genspider samplebot example.com
Esses comandos também geram um arquivo de código básico que você pode complementar com um mecanismo de rotação de IP.
Abra o arquivo sampleproject/spiders/samplebot.pysamplebot.py e atualize-o com o seguinte código:
import scrapy
import random
proxies = ["103.155.217.1:41317", "47.91.56.120:8080", "103.141.143.102:41516", "167.114.96.13:9300", "103.83.232.122:80"]
ip = random.randrange(0, len(proxies))
class SampleSpider(scrapy.Spider):
name = "samplebot"
allowed_domains = ["example.com"]
start_urls = ["https://example.com"]
def start_requests(self):
for url in self.start_urls:
proxy = random.choice(proxies)
yield scrapy.Request(url, meta={"proxy": f"http://{proxy}"})
request = scrapy.Request(
"http://www.example.com/index.html",
meta={"proxy": f"http://{ip}"}
)
def parse(self, response):
# Log the proxy being used in the request
proxy_used = response.meta.get("proxy")
self.logger.info(f"Proxy used: {proxy_used}")
print(response.text)
Execute o seguinte comando no diretório raiz do projeto para rodar este script de scraping:
scrapy crawl samplebot

Dicas para Rotação de IP
O scraping de dados evoluiu para uma forma de competição entre sites e scrapers, com os scrapers desenvolvendo novos métodos e técnicas para obter os dados necessários, enquanto os sites encontram novas formas de bloquear o acesso.
A rotação de IP é uma técnica que visa contornar as limitações impostas pelos sites. Para maximizar a eficácia da rotação de IP e minimizar as chances de ser bloqueado pelo site alvo, considere as seguintes dicas:
- Garanta um pool de proxies amplo e diversificado: Ao usar rotação de IP, você precisa de um pool de proxies significativo com grande número de proxies e ampla variedade de endereços IP. Essa diversidade ajuda a garantir uma rotação adequada e reduz o risco de uso excessivo de proxies, o que pode levar a limites de taxa e bloqueios. Considere usar múltiplos provedores de proxies com diferentes faixas e localizações de IP. Além disso, considere variar o tempo e os intervalos entre suas requisições com diferentes proxies para simular melhor o comportamento natural do usuário.
- Tenha mecanismos robustos de tratamento de erros: Durante o processo de scraping de dados, você pode encontrar diversos erros devido a problemas temporários de conectividade, proxies bloqueados ou mudanças no site alvo. Ao implementar tratamento de erros nos seus scripts, você garante a execução tranquila do processo de scraping, capturando e tratando exceções comuns como erros de conexão, timeouts e erros de status HTTP. Considere configurar circuit breakers para pausar temporariamente o processo de scraping caso um grande número de erros ocorra em um curto período.
- Teste seus proxies antes de usá-los: Antes de implantar seu script de scraping em produção, use uma amostra do seu pool de proxies para testar a funcionalidade de rotação de IP e os mecanismos de tratamento de erros em diferentes cenários. Você pode usar sites de exemplo para simular condições do mundo real e garantir que seu script consiga lidar com esses casos.
- Monitore o desempenho e a eficiência dos proxies: Monitore regularmente o desempenho dos seus proxies para detectar problemas como tempos de resposta lentos ou falhas frequentes. Acompanhe a taxa de sucesso de cada proxy para identificar os ineficientes. Provedores de proxies como a Bright Data oferecem ferramentas para verificar a saúde e o desempenho dos seus proxies. Ao monitorar o desempenho dos proxies, você pode rapidamente alternar para proxies mais confiáveis e remover os de baixo desempenho do seu pool de rotação.
O scraping de dados é um processo iterativo, e os sites podem mudar sua estrutura e padrões de resposta ou implementar novas medidas para impedir o scraping. Monitore regularmente seu processo de scraping e adapte-se a qualquer mudança para manter a eficácia dos seus esforços de extração de dados.
Conclusão
Este artigo explorou a rotação de IP e como implementá-la no seu processo de scraping com Python. Você também aprendeu dicas práticas para manter a eficácia do seu processo de scraping com Python.
A Bright Data é a sua infraestrutura completa para soluções de scraping de dados. Ela oferece proxies de alta qualidade e éticos, um Navegador de scraping, um IDE para desenvolvimento e processos do seu bot de scraping, conjuntos de dados prontos para uso e diversas ferramentas para rotacionar e gerenciar proxies durante o scraping.