Web scraping com Python requests e proxies
Um fluxo de trabalho prático de scraping construído em requests e BeautifulSoup, roteado através de um proxy autenticado para que seu IP de origem permaneça oculto e seu crawler sobreviva a limites de taxa. Código executável completo incluído.
Um scraper é uma sessão, não um loop de requisições.
A diferença entre um scraper que funciona por dez minutos e um que roda por horas quase nunca é a análise — é como você faz as requisições. Um for url in urls: requests.get(url) abre uma nova conexão TCP toda vez, não envia cabeçalhos realistas, não mantém cookies e ataca o alvo de um IP até receber um 429 ou um bloqueio.
A solução é uma requests.Session mais um proxy. Uma sessão agrupa conexões e persiste cookies, então um fluxo de páginas é mais rápido e parece um único cliente coerente. Um proxy autenticado substitui seu endereço real por uma saída de datacenter, então o site nunca vê seu IP de origem e um único endereço bloqueado não encerra todo o trabalho. Proxies s4m falam SOCKS5 na porta 1080 e HTTP na porta 3128, ambos autenticados com USER:PASS — use socks5h:// para que o DNS seja resolvido remotamente e os nomes de host nunca vazem. Para experimentos descartáveis, a lista de proxies públicos gratuitos é um pool separado, use por sua conta e risco.
Um scraper de solicitações resiliente
Sessão, cabeçalhos realistas, tentativas com retrocesso, rotação de proxy e análise com BeautifulSoup em um arquivo. Substitua USER:PASS por suas credenciais.
import random
import time
import requests
from bs4 import BeautifulSoup
from requests.exceptions import RequestException
USER, PASS, HOST = "USER", "PASS", "proxy.s4m.online"
POOL = [
f"socks5h://{USER}:{PASS}@{HOST}:1080", # needs requests[socks]
f"http://{USER}:{PASS}@{HOST}:3128",
]
HEADERS = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
"Accept-Language": "en-US,en;q=0.9",
}
def make_session(proxy):
s = requests.Session()
s.headers.update(HEADERS)
s.proxies = {"http": proxy, "https": proxy}
return s
def fetch(url, retries=4):
for attempt in range(1, retries + 1):
proxy = random.choice(POOL)
try:
s = make_session(proxy)
r = s.get(url, timeout=(5, 20))
if r.status_code == 429:
raise RequestException("rate limited")
r.raise_for_status()
return r
except RequestException as e:
wait = 2 ** attempt + random.random() # exponential backoff
print(f"[{attempt}/{retries}] {proxy} -> {e}; sleeping {wait:.1f}s")
time.sleep(wait)
raise SystemExit(f"giving up on {url}")
html = fetch("https://quotes.toscrape.com/").text
soup = BeautifulSoup(html, "html.parser")
for q in soup.select(".quote"):
text = q.select_one(".text").get_text(strip=True)
who = q.select_one(".author").get_text(strip=True)
print(f"{who}: {text}")O que mantém um crawler vivo
Quatro hábitos que importam mais do que o parser que você escolhe.
Envie um User-Agent real
O UA padrão do python-requests é uma bandeira instantânea. Defina um User-Agent de navegador normal e um cabeçalho Accept-Language para que as solicitações se misturem ao tráfego comum.
Afaste-se, não tente novamente cegamente
Em um 429 ou um timeout, durma com backoff exponencial e jitter antes de tentar novamente. Laços de tentativa apertados apenas aprofundam o bloqueio e queimam o tráfego do proxy.
Gire a saída, não apenas a nova tentativa
Escolha um proxy novo de um pool a cada tentativa para que um IP sinalizado não pare o trabalho. Proxies de datacenter medidos tornam isso barato para escalar.
Respeite o alvo
Leia robots.txt, limite a concorrência e colete apenas o que você tem permissão. Um crawler educado também é mais difícil de bloquear.
De um script para um pipeline real
Uma vez que o loop de busca esteja sólido, o resto é orquestração. Mantenha um pequeno conjunto de URLs proxy e rotacione por solicitação; quando um alvo se torna agressivo, aumente o conjunto em vez da contagem de tentativas. Persista os resultados à medida que avança para que uma falha no meio da execução nunca custe todo o rastreamento, e adicione um atraso educado entre as páginas para que você permaneça abaixo do limite de taxa em vez de lutar contra ele.
Quando você ultrapassa scripts ad-hoc, o mesmo endpoint proxy se encaixa diretamente no Scrapy ou em um cliente assíncrono — veja proxies rotativos em Python para um pool aiohttp. Tudo é construído com os mesmos blocos de construção s4m: proxies SOCKS5 e HTTP autenticados de datacenter, pagamento conforme o uso, com a API e ferramentas para verificar IPs de saída e portas. Se você só precisa verificar rapidamente um país ou protocolo, comece pela lista gratuita.
Perguntas, respondidas
Preciso do PySocks para os exemplos de SOCKS5?
Sim. O suporte a SOCKS em requests vem do PySocks — instale-o com pip install "requests[socks]". O endpoint HTTP na porta 3128 funciona com uma instalação padrão de requests e sem dependências extras.
Como evito ser bloqueado enquanto faço scraping?
Envie um User-Agent realista, limite sua taxa de solicitações, recue em respostas 429 e gire IPs de saída através de um pool de proxies. Bloqueios geralmente estão relacionados ao comportamento e à reputação do IP, não ao parser que você usa.
Os proxies s4m são residenciais?
Não. s4m vende proxies SOCKS5 e HTTP autenticados de datacenter, pagos conforme o uso. A lista de proxies públicos gratuitos é de terceiros e use por sua conta e risco, útil apenas para testes rápidos.
Por que usar socks5h em vez de socks5?
socks5h pede ao proxy para resolver DNS, então os nomes de host que você coleta nunca vazam do seu computador. O socks5 simples resolve localmente primeiro, o que pode revelar seus alvos.
Proxies construídos para scraping
Direcione solicitações para proxy.s4m.online, rotacione através de saídas SOCKS5 e HTTP autenticadas do datacenter, e pague apenas pelo tráfego que você usa. Adicione um IP dedicado sempre que um alvo esperar um.
As pessoas encontraram esta página pesquisando por
- web scraping com Python requests e proxies
- proxy para scraping tutorial
- encaminhamento de porta através de VPNs e proxies
- proxy para scraping
- como configurar openvpn
- baixar configuração de proxy
- interruptor de desligamento vpn
- proxy http
- como lista de proxies gratuitos funciona
- WireGuard vs OpenVPN
- endereço IP
- pagando por uma VPN ou proxy com cripto
- comprar proxy http
Frases de busca reais que esta página responde — os links abrem a página que as cobre em profundidade.