Você iniciou o parser na Wildberries ou Ozon, configurou o proxy, e após uma hora se deparou com limites e recebeu um monte de IPs banidos — embora tenha coletado apenas alguns milhares de produtos? O problema quase sempre é o mesmo: parâmetros de URL. Filtros, classificações, paginação e tags UTM transformam um único catálogo em dezenas de milhares de duplicatas técnicas, e o parser honestamente percorre todas elas, em vez de coletar dados únicos.
O que são duplicatas de páginas devido a parâmetros de URL
Uma duplicata de página é uma URL que tecnicamente difere de outra, mas o conteúdo é o mesmo ou quase o mesmo. Um exemplo clássico: o catálogo de vestidos na Wildberries está disponível no endereço /catalog/zhenshchinam/odezhda/platya, mas a mesma listagem, classificada por preço, já se transforma em /catalog/zhenshchinam/odezhda/platya?sort=price. Adicione um filtro por tamanho, marca, cor, faixa de preço — e você terá centenas de combinações de parâmetros, cada uma delas uma URL formalmente única.
Para um usuário comum, isso é conveniente: escolheu um filtro — viu o produto desejado. Mas para um parser, que percorre links por uma máscara ou segue a paginação, cada uma dessas combinações é uma página separada que precisa ser carregada, analisada e salva. Se não forem definidas regras, o robô "cairá" em um funil infinito de filtros: classificação por preço → filtro por marca → filtro por tamanho → nova classificação, mas em outra ordem. O número de URLs únicas cresce exponencialmente, enquanto os dados úteis não aumentam — são os mesmos produtos, apenas em uma ordem diferente ou em um conjunto reduzido.
Uma categoria separada de duplicatas são as tags UTM e parâmetros de sessão (utm_source, clid, _openstat). Eles não afetam o conteúdo da página, mas se o parser coleta links de outras páginas do site como estão, ele puxará a mesma ficha de produto dezenas de vezes com diferentes sufixos no endereço.
Por que isso é crítico para o parser
Para um especialista em SEO, as duplicatas de páginas são um problema de indexação e diluição de peso. Para quem está raspando um marketplace para monitorar preços ou coletar sortimentos, as duplicatas são uma perda direta de dinheiro e tempo, e isso em três frentes ao mesmo tempo.
Primeiro, cada carregamento de uma página duplicada é uma solicitação através do proxy. Se você está usando proxies rotativos pagos (e para contornar a proteção da Wildberries e Ozon, você não pode ficar sem eles), você paga pelo tráfego também por solicitações inúteis. Em uma escala de dezenas de milhares de fichas, 30-40% de solicitações extras para duplicatas aumentam significativamente o consumo.
Em segundo lugar, a velocidade de coleta cai drasticamente. Se o seu parser é fisicamente capaz de fazer 10 solicitações por segundo, e um terço delas vai para páginas com os mesmos dados, a velocidade real de coleta de conteúdo único cai para 6-7 fichas por segundo. Em grandes catálogos, essa é a diferença entre coletar em uma hora e em meio dia.
Em terceiro lugar, e isso é o mais doloroso — o risco de banimento de IP cresce proporcionalmente ao número de solicitações. Sistemas anti-bot dos marketplaces consideram a frequência de acessos de um único endereço. Se você faz três vezes mais solicitações do que o necessário para coletar os dados-alvo, você esgota três vezes mais rápido o "crédito de confiança" do proxy e acaba sob captcha ou bloqueio.
Exemplos reais: Wildberries, Ozon, Avito
Na Wildberries, o mesmo catálogo pode ser retornado com os parâmetros ?sort=popular, ?sort=rate, ?sort=newly, além de filtros fbrand, fsize, priceU. Se o parser coleta links "ficha → produtos semelhantes → novamente ficha", ele gera facilmente URLs com combinações de todos esses parâmetros, embora o conjunto de produtos dentro se sobreponha em 90%.
Na Ozon, a história é semelhante com o parâmetro ?sorting= e filtros por características do produto — lá as combinações são ainda mais, pois cada categoria tem seu próprio conjunto de filtros (material, volume, cor e assim por diante).
No Avito, a dor é separada — parâmetros de geolocalização e raio de busca (?radius=, ?district=). O mesmo anúncio pode "aparecer" na listagem com diferentes combinações desses parâmetros, e um parser ingênuo considerará isso como diferentes descobertas, inflando a base com registros duplicados.
Como as duplicatas consomem o orçamento de proxy e tempo
Vamos calcular com um exemplo hipotético. Suponha que uma categoria tenha 500 produtos únicos, mas devido a 8 opções de classificação e 12 combinações de filtros populares, o parser, sem normalização de URL, percorre não 500, mas 4000-5000 páginas com listagens, além de visitas repetidas às mesmas fichas. Se uma solicitação através de um proxy residencial custa uma unidade de tráfego, então, com uma abordagem ingênua, você gasta de 8 a 10 vezes mais do que o necessário para obter o mesmo volume de dados únicos.
Pior ainda, solicitações repetidas de um mesmo IP para URLs semelhantes — esse é um padrão característico para sistemas anti-bot. Quanto maior a frequência e a uniformidade das solicitações, mais rápido a proteção é ativada. Isso cria um ciclo vicioso: duplicatas aumentam o número de solicitações → a carga no pool de proxies aumenta → IPs são banidos mais rapidamente → é necessário trocar proxies com mais frequência e reiniciar a coleta → o tempo e o custo final do scraping aumentam ainda mais.
Na prática, isso se parece com isso: um vendedor quer monitorar os preços de 200 concorrentes na Wildberries uma vez por dia, mas devido a URLs não limpas, seu script faz 15.000 solicitações em vez de 2.000, esbarra nos limites do pool de proxies e obtém dados incompletos à noite em vez de pela manhã.
Como detectar duplicatas antes de iniciar o parser
Antes de escalar a coleta, vale a pena gastar uma hora analisando a estrutura de URL do site alvo. Aqui está uma ordem prática de ações:
- Abra o catálogo alvo no navegador e percorra manualmente os filtros e classificações — registre quais parâmetros aparecem na barra de endereços.
- Verifique se o conteúdo da página muda ao adicionar um parâmetro que não afeta a listagem (por exemplo, uma tag UTM) — se o conteúdo for o mesmo, esse parâmetro deve ser ignorado durante a coleta.
- Observe a
rel="canonical"no código-fonte da página — os sites frequentemente indicam qual URL é considerado "principal" para as variantes duplicadas. - Coleta uma pequena amostra de teste de 100-200 URLs e passe-a por uma deduplicação simples com base em parâmetros-chave — veja quanto a lista será reduzida.
- Verifique o robots.txt — às vezes, já existem diretivas Disallow para URLs parametrizados, isso também é uma dica sobre quais parâmetros são considerados "lixo".
Normalização de URL: regras e exemplos
A normalização é o processo de trazer URLs a uma forma canônica única antes de decidir se deve ou não percorrê-las. O princípio básico: destacar os parâmetros "significativos" (por exemplo, o número da página de paginação ou a categoria) e descartar os "insignificantes" (classificação, UTM, identificadores de sessão).
Um exemplo prático da regra de normalização para um catálogo semelhante ao da Wildberries:
import urllib.parse as up
IGNORED_PARAMS = {"sort", "utm_source", "utm_medium", "utm_campaign", "clid", "_openstat"}
def normalize_url(url: str) -> str:
parsed = up.urlparse(url)
query = up.parse_qsl(parsed.query)
# mantemos apenas os parâmetros significativos, descartamos os demais
filtered = [(k, v) for k, v in query if k not in IGNORED_PARAMS]
filtered.sort() # trazemos a ordem dos parâmetros para uma forma única
new_query = up.urlencode(filtered)
return up.urlunparse(parsed._replace(query=new_query))
Após a normalização, todas as variantes de uma mesma listagem com diferentes classificações se condensam em uma única URL. Antes de enviar uma solicitação através do proxy, o parser verifica se esse endereço normalizado já foi encontrado — se sim, ele o ignora. Essa é a maneira mais barata de reduzir o número de solicitações sem perder a integridade dos dados.
Para casos simples, essa mesma lógica pode ser implementada sem código — através das configurações da ferramenta de scraping: especificar "ignorar parâmetros" e listar os parâmetros, ou definir uma expressão regular para cortar o sufixo da URL após o sinal de interrogação, se os parâmetros não carregarem informações significativas para sua tarefa.
Configuração do parser para ignorar parâmetros
A maioria das soluções prontas para coleta de dados de marketplaces e construtores de scraping suporta regras de exclusão de parâmetros de URL no nível das configurações do projeto. Aqui está o que você deve verificar e configurar em primeiro lugar:
- Lista de parâmetros ignorados. Inclua todos os encontrados na etapa de análise de classificação, tags UTM e identificadores de sessão.
- Deduplicação por hash da URL normalizada. Muitos parsers mantêm uma lista de endereços já visitados — é importante que a comparação seja feita pela versão normalizada, e não pela string original.
- Limitação da profundidade de passagem dos filtros. Se a tarefa é coletar o sortimento da categoria, basta uma "passagem básica" sem classificações e filtros, e não uma passagem recursiva por todas as combinações.
- Priorizar a paginação sobre os filtros. Se o site fornece a lista completa de produtos através de navegação paginada, isso geralmente é suficiente — percorrer a mesma lista com filtros aplicados é redundante.
Após essa configuração, o volume de solicitações geralmente é reduzido em 3-6 vezes, dependendo de quão "parametrizado" é o catálogo do site de origem.
O papel do proxy na escalabilidade do scraping
Mesmo após a normalização ideal de URLs, o scraping de grandes catálogos da Wildberries ou Ozon requer a distribuição de solicitações entre múltiplos endereços IP — caso contrário, a proteção anti-bot rapidamente rastreará a atividade anômala de uma única fonte. Aqui, é importante escolher corretamente o tipo de proxy para a tarefa.
Para a coleta em grande escala de fichas de produtos e monitoramento de preços, onde o volume e a velocidade são importantes a um custo razoável, geralmente são suficientes proxies de datacenter — eles são mais rápidos e mais baratos que os residenciais, o que é crítico com milhões de solicitações por dia. Mas se a proteção do site banir agressivamente os intervalos de IPs de datacenter, vale a pena mudar para proxies residenciais, que se parecem com usuários comuns de provedores reais e são menos propensos a serem suspeitos.
Para tarefas pontuais — por exemplo, verificar como o preço de um produto específico é exibido em um dispositivo móvel em uma região específica — serão úteis proxies móveis, que emulam a conexão através de um operador de telefonia celular e quase nunca são bloqueados em massa.
É importante entender: a escolha correta do proxy não substitui a normalização de URLs, mas a complementa. Sem a limpeza de duplicatas, você simplesmente queimará mais rapidamente até mesmo o pool de IPs de melhor qualidade. Primeiro, reduza o número de solicitações inúteis, depois escale as restantes através da rotação de proxies — é dessa forma que se obtém a máxima economia.
Checklist antes de iniciar a coleta de dados
Antes de iniciar o parser em grande escala, passe por uma lista curta de verificações:
| Item de verificação | Por que é necessário |
|---|---|
| Lista de parâmetros de classificação e filtros identificados | Entender quais URLs podem ser consideradas duplicatas |
| Regra de normalização de URL configurada | Consolidar duplicatas em um único endereço canônico |
| Deduplicação por hash ativada | Excluir o carregamento repetido dos mesmos dados |
| Tipo de proxy escolhido para volume e agressividade da proteção | Reduzir o risco de banimento e acelerar a coleta |
| Limites de solicitações por IP definidos com margem | Evitar o banimento em massa do pool de proxies |
Conclusão
Filtros, classificações e parâmetros de serviço em URLs não são apenas um detalhe técnico, mas uma das principais fontes de tráfego inútil ao raspar marketplaces. Sem a normalização de URLs, o parser pode fazer de 5 a 10 vezes mais solicitações do que o necessário para obter os mesmos dados, o que impacta diretamente o orçamento para proxies, a velocidade de coleta e o risco de bloqueios.
A solução é simples na formulação, mas requer disciplina na fase de preparação: analise a estrutura de URL do site alvo, determine quais parâmetros afetam o conteúdo e quais não, configure a deduplicação pelo endereço normalizado e só então escale a coleta através da rotação de proxies. Se sua tarefa é monitorar de forma estável os preços e sortimentos na Wildberries, Ozon ou Avito em grande volume, comece com proxies residenciais — eles oferecem o melhor equilíbrio entre a confiança dos sistemas anti-bot e a flexibilidade de configuração para a tarefa específica.