{"id":45891,"date":"2026-06-24T11:19:06","date_gmt":"2026-06-24T11:19:06","guid":{"rendered":"https:\/\/floppydata.com\/sem-categoria\/guia-de-scraper-do-ebay-como-extrair-dados-do-ebay\/"},"modified":"2026-06-24T11:19:06","modified_gmt":"2026-06-24T11:19:06","slug":"ebay-scraper-guide-how-to-extract-data-from-ebay","status":"publish","type":"post","link":"https:\/\/floppydata.com\/pt-br\/blog\/ebay-scraper-guide-how-to-extract-data-from-ebay\/","title":{"rendered":"Guia de scraper do eBay: Como extrair dados do eBay"},"content":{"rendered":"<p>O eBay tem uma mina de ouro de dados p\u00fablicos sobre pre\u00e7os. Milh\u00f5es de an\u00fancios ativos em itens colecion\u00e1veis, eletr\u00f4nicos, pe\u00e7as fora de linha, o que voc\u00ea quiser \u2014 tudo isso \u00e9 \u00fatil para acompanhar pre\u00e7os, fazer pesquisa de mercado ou an\u00e1lise da concorr\u00eancia. O problema \u00e9 conseguir acessar esses dados de forma confi\u00e1vel. Um script simples em Python talvez te deixe ver algumas p\u00e1ginas antes que o eBay comece a te encher de CAPTCHAs.   <\/p>\n<p>Ent\u00e3o, neste guia, vou te mostrar como fazer o scraping do eBay da maneira certa usando o Web Unlocker da Floppydata e realmente conseguir resultados.<\/p>\n<div style=\"border-left: 3px solid #e5e7eb; padding-left: 16px; margin: 24px 0;\">\n<div style=\"font-size: 11px; font-weight: 600; color: #9ca3af; text-transform: uppercase; margin-bottom: 8px;\">TL;DR<\/div>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; font-style: italic; margin: 0;\">Como extrair an\u00fancios do eBay sem perder tempo com CAPTCHAs e seletores que n\u00e3o funcionam<\/p>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; margin: 8px 0 0 0;\">\u2022 O eBay bloqueia rapidamente os scrapers b\u00e1sicos \u2014 CAPTCHAs, limites de taxa, detec\u00e7\u00e3o de bots, tudo isso. Uma simples solicita\u00e7\u00e3o em Python n\u00e3o d\u00e1 conta do recado. <\/p>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; margin: 8px 0 0 0;\">\u2022 A maneira mais f\u00e1cil \u00e9 usar o Web Unlocker da Floppydata \u2014 ele lida com a camada anti-bot e te entrega um HTML limpo.<\/p>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; margin: 8px 0 0 0;\">\u2022 A partir da\u00ed, basta usar Python e o BeautifulSoup para extrair dados de listagens para acompanhamento de pre\u00e7os, pesquisa e an\u00e1lise.<\/p>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; margin: 8px 0 0 0;\">\u2022 A maioria dos tutoriais de scraping que rolam por a\u00ed j\u00e1 n\u00e3o funcionam mais \u2014 o eBay mudou de <code>li.s-item<\/code> para <code>li.s-card<\/code> e muitos seletores nunca foram atualizados.<\/p>\n<p style=\"font-size: 14px; line-height: 1.6; color: #6b7280; margin: 8px 0 0 0;\">\u2022 As novas contas do Floppydata t\u00eam direito a cinco extra\u00e7\u00f5es gr\u00e1tis, ent\u00e3o voc\u00ea pode seguir este guia sem precisar gastar nada de cara.<\/p>\n<\/div>\n<h2>Ent\u00e3o, o que \u00e9 mesmo o \u201cscraping\u201d do eBay?<\/h2>\n<p>Sinceramente, \u00e9 bem simples. Voc\u00ea s\u00f3 precisa extrair os dados dos an\u00fancios dispon\u00edveis publicamente das p\u00e1ginas do eBay e transform\u00e1-los em algo com que voc\u00ea possa trabalhar \u2014 um arquivo CSV, JSON, o que for. Em vez de clicar nos an\u00fancios um por um, um scraper pega tudo isso de uma vez s\u00f3.  <\/p>\n<p>Tem dois tipos de p\u00e1gina que vale a pena conhecer antes de entrarmos no c\u00f3digo propriamente dito:<\/p>\n<ul>\n<li><strong>P\u00e1ginas de resultados de busca<\/strong>: a visualiza\u00e7\u00e3o resumida com t\u00edtulo, pre\u00e7o, estado, frete e um link para o an\u00fancio.<\/li>\n<li><strong>P\u00e1ginas de detalhes dos itens<\/strong>, os URLs do tipo <code>\/itm\/ITEM_ID<\/code>, onde ficam as informa\u00e7\u00f5es mais detalhadas, como descri\u00e7\u00f5es completas, avalia\u00e7\u00f5es do vendedor, especifica\u00e7\u00f5es do item e op\u00e7\u00f5es de variantes.<\/li>\n<\/ul>\n<p>Neste tutorial, vamos nos concentrar nas p\u00e1ginas de resultados de busca, j\u00e1 que \u00e9 por a\u00ed que a maioria das pessoas come\u00e7a.<\/p>\n<h2>Por que extrair dados do eBay?<\/h2>\n<p>Ent\u00e3o, depois que voc\u00ea conseguir esses dados, tem, sinceramente, um monte de coisas que d\u00e1 pra fazer com eles. As que eu realmente uso: <\/p>\n<ol>\n<li><strong>Acompanhamento de pre\u00e7os.<\/strong>  Voc\u00ea consegue ver de uma vez s\u00f3 quais s\u00e3o os pre\u00e7os reais dos produtos em milhares de an\u00fancios ativos e vendidos, e os que j\u00e1 foram vendidos s\u00e3o o que vale a pena, porque \u00e9 isso que as pessoas realmente pagaram, e n\u00e3o um valor imagin\u00e1rio que o vendedor colocou l\u00e1 na esperan\u00e7a de conseguir.<\/li>\n<li><strong>An\u00e1lise da concorr\u00eancia.<\/strong>  Voc\u00ea pode ver exatamente o que est\u00e1 vendendo, em que estado o produto est\u00e1 sendo vendido, quem est\u00e1 vendendo e quanto est\u00e3o cobrando; assim, em vez de ficar adivinhando qual pre\u00e7o definir, voc\u00ea simplesmente sabe.<\/li>\n<li><strong>Revenda e arbitragem.<\/strong>  \u00c9 essa parte que paga as contas, porque os im\u00f3veis com pre\u00e7os abaixo do valor de mercado est\u00e3o dispon\u00edveis agora mesmo, e os dados te ajudam a encontr\u00e1-los e garantir a compra antes mesmo que outra pessoa os veja.<\/li>\n<li><strong>Pesquisa de produtos.<\/strong>  Antes de investir dinheiro de verdade no estoque de uma categoria, voc\u00ea pode analisar os n\u00fameros e descobrir em poucos minutos se existe uma demanda real ou se voc\u00ea s\u00f3 estaria jogando dinheiro fora em produtos que nunca vendem.<\/li>\n<li><strong>Acompanhamento do vendedor.<\/strong>  E quando voc\u00ea quiser dar uma olhada em um vendedor espec\u00edfico, \u00e9 exatamente a mesma coisa: basta colocar o URL da loja dele no lugar da busca e, de repente, todo o cat\u00e1logo e os pre\u00e7os dele est\u00e3o bem na sua frente.<\/li>\n<\/ol>\n<p>Se o seu trabalho tem alguma rela\u00e7\u00e3o com revenda, com\u00e9rcio eletr\u00f4nico ou defini\u00e7\u00e3o de pre\u00e7os, esse tipo de dado te poupa uma quantidade absurda de tempo e te ajuda a tomar decis\u00f5es mais inteligentes com muito mais rapidez.<\/p>\n<h2>Por que n\u00e3o usar simplesmente a API oficial?<\/h2>\n<p>Sinceramente, n\u00e3o \u00e9 uma op\u00e7\u00e3o ruim para coisas simples. A API Browse lida bem com consultas de volume moderado em an\u00fancios ativos. Mas tem <strong>um processo de aprova\u00e7\u00e3o<\/strong> que voc\u00ea precisa passar primeiro, limites de taxa que entram em a\u00e7\u00e3o bem r\u00e1pido e, al\u00e9m disso, ela simplesmente n\u00e3o oferece tudo o que voc\u00ea precisa.  <\/p>\n<p>Os an\u00fancios vendidos n\u00e3o aparecem, as avalia\u00e7\u00f5es n\u00e3o aparecem, os dados completos das variantes n\u00e3o aparecem da mesma forma que aparecem na p\u00e1gina real. Ent\u00e3o, quando voc\u00ea precisa ter uma vis\u00e3o completa \u2014 o tipo de informa\u00e7\u00e3o que um usu\u00e1rio de verdade v\u00ea ao carregar a p\u00e1gina \u2014, <strong>o scraping \u00e9 simplesmente a op\u00e7\u00e3o mais pr\u00e1tica<\/strong>. <\/p>\n<p>Se voc\u00ea ainda n\u00e3o conhece muito bem esse assunto, o Floppydata tem um bom guia b\u00e1sico sobre <a href=\"https:\/\/floppydata.com\/blog\/what-is-a-web-unblocker\/\">o que um \u201cweb unlocker\u201d realmente faz<\/a>.<\/p>\n<h2>O que torna dif\u00edcil fazer scraping no eBay?<\/h2>\n<p>N\u00e3o \u00e9 imposs\u00edvel, mas com certeza tem algumas coisas que v\u00e3o contra voc\u00ea. Duas coisas, mais especificamente, com as quais a maioria das pessoas se depara. <\/p>\n<p>Uma delas \u00e9 a detec\u00e7\u00e3o anti-bot. O eBay usa CAPTCHAs e limita\u00e7\u00e3o de taxa, e um IP de baixa confian\u00e7a vai te render erros 403 rapidinho. Eles tamb\u00e9m refor\u00e7aram as regras no in\u00edcio de 2026, ent\u00e3o seja respons\u00e1vel: use s\u00f3 dados p\u00fablicos, mantenha as taxas de solicita\u00e7\u00e3o normais, nada que envolva pedidos ou coisas do tipo. Voc\u00ea precisa de IPs residenciais e de algo que realmente se pare\u00e7a com o comportamento de um navegador, ou n\u00e3o vai conseguir respostas corretas.   <\/p>\n<p>A segunda \u00e9 a marca\u00e7\u00e3o, e essa a\u00ed \u00e9 meio sorrateira. Enquanto eu estava montando isso, percebi que o eBay j\u00e1 tinha mudado de <code>li.s-item<\/code> para <code>li.s-card<\/code>, e tudo o que estava l\u00e1 dentro, tipo <code>.s-card__title<\/code>, <code>.s-card__price<\/code> e <code>.s-card__subtitle<\/code>. A maioria dos guias online ainda aponta para a estrutura antiga, ent\u00e3o agora eles simplesmente n\u00e3o funcionam mais. Seus seletores v\u00e3o ficar desatualizados em algum momento, \u00e9 assim mesmo com o eBay, ent\u00e3o inclua algumas verifica\u00e7\u00f5es preventivas para campos ausentes desde o in\u00edcio.   <\/p>\n<p>De qualquer forma, \u00e9 por isso que eu fa\u00e7o tudo pelo Web Unlocker da Floppydata, em vez de ficar me debatendo diretamente com o eBay.<\/p>\n<h2>Pr\u00e9-requisitos<\/h2>\n<p>Tr\u00eas coisas:<\/p>\n<ul>\n<li>Python 3.10 ou superior<\/li>\n<li>Uma conta no Floppydata com uma chave da API do Web Unlocker. Cada conta nova vem com cinco extra\u00e7\u00f5es gr\u00e1tis, ent\u00e3o voc\u00ea pode seguir todo esse guia sem precisar pagar nada. A chave fica no painel do Web Unlocker.  <\/li>\n<li>Duas bibliotecas: <code>requests<\/code> e  <code>beautifulsoup4<\/code><\/li>\n<\/ul>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-45827\" src=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3.png\" alt=\"Configura\u00e7\u00f5es da conta e informa\u00e7\u00f5es sobre a chave de API\" width=\"1785\" height=\"839\" srcset=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3.png 1785w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3-300x141.png 300w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3-1024x481.png 1024w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3-768x361.png 768w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image3-3-1536x722.png 1536w\" sizes=\"(max-width: 1785px) 100vw, 1785px\" \/><\/p>\n<p>Primeiro, instale as duas bibliotecas:<\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code>pip install requests beautifulsoup4\n<\/code><\/pre>\n<p>Ent\u00e3o, a pasta do seu projeto:<\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code>mkdir ebay-scraper\n<span style=\"color: #008000;\">cd<\/span> ebay-scraper\ntouch ebay_scraper.py\n<\/code><\/pre>\n<h2>Enviando a primeira solicita\u00e7\u00e3o<\/h2>\n<p>A primeira coisa que tentei foi s\u00f3 uma solicita\u00e7\u00e3o b\u00e1sica pra ver o que acontecia:<\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #008000; font-weight: bold;\">import<\/span> <span style=\"color: #00f; font-weight: bold;\">requests<\/span>\n\nurl <span style=\"color: #666;\">=<\/span> <span style=\"color: #ba2121;\">\"https:\/\/www.ebay.com\/sch\/i.html?_nkw=mechanical+keyboard\"<\/span>\nresponse <span style=\"color: #666;\">=<\/span> requests<span style=\"color: #666;\">.<\/span>get(url)\n\n<span style=\"color: #008000;\">print<\/span>(response<span style=\"color: #666;\">.<\/span>status_code)\n<span style=\"color: #008000;\">print<\/span>(response<span style=\"color: #666;\">.<\/span>text[:<span style=\"color: #666;\">500<\/span>])\n<\/code><\/pre>\n<p>Bloqueia a p\u00e1gina. N\u00e3o tem an\u00fancios, s\u00f3 coisas in\u00fateis. O eBay detecta uma solicita\u00e7\u00e3o simples em Python na hora: sem assinatura digital, sem IP confi\u00e1vel&#8230; simplesmente n\u00e3o vai rolar. Ent\u00e3o, em vez de perder tempo com isso, eu s\u00f3 uso o Web Unlocker.   <\/p>\n<h2>Extraiendo dados do eBay com o Floppydata Web Unlocker<\/h2>\n<p>Ele cuida de todas as coisas chatas: IP residencial, impress\u00e3o digital do navegador, renderiza\u00e7\u00e3o da p\u00e1gina e te entrega um HTML limpo. Al\u00e9m disso, s\u00f3 cobra pelas extra\u00e7\u00f5es bem-sucedidas, ent\u00e3o voc\u00ea n\u00e3o perde cr\u00e9ditos nas que derem errado. <\/p>\n<p>Eu sempre testo no ambiente de testes do painel (<a href=\"https:\/\/app.floppydata.com\/tools\/scrape\">ambiente de testes do Web Unlocker sem c\u00f3digo<\/a>) antes de escrever qualquer coisa. Cola a URL de busca, clica em \u201cScrape\u201d e v\u00ea o que aparece. \u00c9 muito mais f\u00e1cil criar um analisador quando voc\u00ea j\u00e1 sabe com o que est\u00e1 trabalhando.  <\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-45836\" src=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image1-3.png\" alt=\"Captura de tela da interface de uma ferramenta de web scraping\" width=\"1400\" height=\"817\" srcset=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image1-3.png 1400w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image1-3-300x175.png 300w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image1-3-1024x598.png 1024w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image1-3-768x448.png 768w\" sizes=\"(max-width: 1400px) 100vw, 1400px\" \/><\/p>\n<p>J\u00e1 temos o HTML, ent\u00e3o vamos passar para a programa\u00e7\u00e3o.<\/p>\n<h3>Etapa 1: Configurar a solicita\u00e7\u00e3o<\/h3>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #008000; font-weight: bold;\">import<\/span> <span style=\"color: #00f; font-weight: bold;\">requests<\/span>\n<span style=\"color: #008000; font-weight: bold;\">import<\/span> <span style=\"color: #00f; font-weight: bold;\">json<\/span>\n<span style=\"color: #008000; font-weight: bold;\">from<\/span> <span style=\"color: #00f; font-weight: bold;\">bs4<\/span> <span style=\"color: #008000; font-weight: bold;\">import<\/span> BeautifulSoup\n\nAPI_URL <span style=\"color: #666;\">=<\/span> <span style=\"color: #ba2121;\">\"https:\/\/api.floppydata.net\/v1\/webUnlocker\"<\/span>\nAPI_KEY <span style=\"color: #666;\">=<\/span> <span style=\"color: #ba2121;\">\"YOUR_API_KEY\"<\/span>\n\nSEARCH_URL <span style=\"color: #666;\">=<\/span> <span style=\"color: #ba2121;\">\"https:\/\/www.ebay.com\/sch\/i.html?_nkw=mechanical+keyboard&_pgn=1\"<\/span>\nOUTPUT_FILE <span style=\"color: #666;\">=<\/span> <span style=\"color: #ba2121;\">\"ebay_listings.json\"<\/span>\n<\/code><\/pre>\n<p>Substitua <code>YOUR_API_KEY<\/code> pela chave do seu painel.<\/p>\n<p>Al\u00e9m disso, <code>_pgn=1<\/code> \u00e9 s\u00f3 o n\u00famero da p\u00e1gina. Se quiser a segunda p\u00e1gina, mude para <code>_pgn=2<\/code>. A terceira p\u00e1gina, <code>_pgn=3<\/code>. Simples.   <\/p>\n<h3>Etapa 2: Obtenha a p\u00e1gina por meio do Web Unlocker<\/h3>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #00f;\">fetch_html<\/span>(url):\n    response <span style=\"color: #666;\">=<\/span> requests<span style=\"color: #666;\">.<\/span>post(\n        API_URL,\n        headers<span style=\"color: #666;\">=<\/span>{\n            <span style=\"color: #ba2121;\">\"Content-Type\"<\/span>: <span style=\"color: #ba2121;\">\"application\/json\"<\/span>,\n            <span style=\"color: #ba2121;\">\"X-Api-Key\"<\/span>: API_KEY,\n        },\n        json<span style=\"color: #666;\">=<\/span>{\n            <span style=\"color: #ba2121;\">\"url\"<\/span>: url,\n            <span style=\"color: #ba2121;\">\"country\"<\/span>: <span style=\"color: #ba2121;\">\"US\"<\/span>,\n            <span style=\"color: #ba2121;\">\"city\"<\/span>: <span style=\"color: #ba2121;\">\"New York\"<\/span>,\n            <span style=\"color: #ba2121;\">\"difficulty\"<\/span>: <span style=\"color: #ba2121;\">\"medium\"<\/span>,\n            <span style=\"color: #ba2121;\">\"expiration\"<\/span>: <span style=\"color: #666;\">0<\/span>,\n        },\n        timeout<span style=\"color: #666;\">=120<\/span>,\n    )\n\n    response<span style=\"color: #666;\">.<\/span>raise_for_status()\n\n    data <span style=\"color: #666;\">=<\/span> response<span style=\"color: #666;\">.<\/span>json()\n    html <span style=\"color: #666;\">=<\/span> data<span style=\"color: #666;\">.<\/span>get(<span style=\"color: #ba2121;\">\"html\"<\/span>)\n\n    <span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #a2f; font-weight: bold;\">not<\/span> html:\n        <span style=\"color: #008000; font-weight: bold;\">raise<\/span> <span style=\"color: #cb3f38; font-weight: bold;\">ValueError<\/span>(<span style=\"color: #ba2121;\">\"Unlocker response did not include an 'html' field.\"<\/span>)\n\n    <span style=\"color: #008000; font-weight: bold;\">return<\/span> html\n<\/code><\/pre>\n<p>O pa\u00eds e a cidade garantem que a solicita\u00e7\u00e3o passe por um IP residencial dos EUA, o que afeta tanto o pre\u00e7o quanto os an\u00fancios que realmente aparecem. A dificuldade <code>medium<\/code> \u00e9 a configura\u00e7\u00e3o certa para o eBay, especialmente porque ele tem uma prote\u00e7\u00e3o anti-bot bem forte. Se usar um valor menor, voc\u00ea simplesmente vai ser bloqueado. A expira\u00e7\u00e3o <code>0<\/code> for\u00e7a o carregamento de uma p\u00e1gina nova a cada vez, em vez de usar uma resposta em cache. O HTML renderizado aparece no campo <code>html<\/code> do JSON, e \u00e9 isso que o BeautifulSoup analisa na pr\u00f3xima etapa. Se quiser ver todos os par\u00e2metros dispon\u00edveis, a <a href=\"https:\/\/floppydata.com\/docs\/api-reference\/endpoint\/web-unlocker\">refer\u00eancia da API do Web Unlocker<\/a> tem todos eles.     <\/p>\n<h3>Etapa 3: Extraia as listagens<\/h3>\n<p>Cada resultado na p\u00e1gina de busca \u00e9 um  <code>li.s-card<\/code>  container. Para extrair os an\u00fancios do eBay de forma organizada, percorremos cada cart\u00e3o e extra\u00edmos os campos que queremos, usando verifica\u00e7\u00f5es preventivas para que a falta de um campo nunca fa\u00e7a o programa travar: <\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #00f;\">extract_listings<\/span>(html):\n    soup <span style=\"color: #666;\">=<\/span> BeautifulSoup(html, <span style=\"color: #ba2121;\">\"html.parser\"<\/span>)\n    cards <span style=\"color: #666;\">=<\/span> soup<span style=\"color: #666;\">.<\/span>select(<span style=\"color: #ba2121;\">\"li.s-card\"<\/span>)\n    listings <span style=\"color: #666;\">=<\/span> []\n\n    <span style=\"color: #008000; font-weight: bold;\">for<\/span> card <span style=\"color: #a2f; font-weight: bold;\">in<\/span> cards:\n        title_el <span style=\"color: #666;\">=<\/span> card<span style=\"color: #666;\">.<\/span>select_one(<span style=\"color: #ba2121;\">\".s-card__title\"<\/span>)\n        title <span style=\"color: #666;\">=<\/span> title_el<span style=\"color: #666;\">.<\/span>get_text(<span style=\"color: #ba2121;\">\" \"<\/span>, strip<span style=\"color: #666;\">=<\/span><span style=\"color: #008000; font-weight: bold;\">True<\/span>) <span style=\"color: #008000; font-weight: bold;\">if<\/span> title_el <span style=\"color: #008000; font-weight: bold;\">else<\/span> <span style=\"color: #008000; font-weight: bold;\">None<\/span>\n\n        <span style=\"color: #008000; font-weight: bold;\">if<\/span> title:\n            <span style=\"color: #3d7b7b; font-style: italic;\"># eBay appends this as accessibility text<\/span>\n            title <span style=\"color: #666;\">=<\/span> title<span style=\"color: #666;\">.<\/span>replace(<span style=\"color: #ba2121;\">\"Opens in a new window or tab\"<\/span>, <span style=\"color: #ba2121;\">\"\"<\/span>)<span style=\"color: #666;\">.<\/span>strip()\n\n        <span style=\"color: #3d7b7b; font-style: italic;\"># Skip the placeholder card at the top of search results<\/span>\n        <span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #a2f; font-weight: bold;\">not<\/span> title <span style=\"color: #a2f; font-weight: bold;\">or<\/span> title <span style=\"color: #666;\">==<\/span> <span style=\"color: #ba2121;\">\"Shop on eBay\"<\/span>:\n            <span style=\"color: #008000; font-weight: bold;\">continue<\/span>\n\n        price_el <span style=\"color: #666;\">=<\/span> card<span style=\"color: #666;\">.<\/span>select_one(<span style=\"color: #ba2121;\">\".s-card__price\"<\/span>)\n        condition_el <span style=\"color: #666;\">=<\/span> card<span style=\"color: #666;\">.<\/span>select_one(<span style=\"color: #ba2121;\">\".s-card__subtitle\"<\/span>)\n\n        <span style=\"color: #3d7b7b; font-style: italic;\"># Shipping info sits inside attribute rows<\/span>\n        shipping <span style=\"color: #666;\">=<\/span> <span style=\"color: #008000; font-weight: bold;\">None<\/span>\n\n        <span style=\"color: #008000; font-weight: bold;\">for<\/span> row <span style=\"color: #a2f; font-weight: bold;\">in<\/span> card<span style=\"color: #666;\">.<\/span>select(<span style=\"color: #ba2121;\">\".s-card__attribute-row\"<\/span>):\n            text <span style=\"color: #666;\">=<\/span> row<span style=\"color: #666;\">.<\/span>get_text(<span style=\"color: #ba2121;\">\" \"<\/span>, strip<span style=\"color: #666;\">=<\/span><span style=\"color: #008000; font-weight: bold;\">True<\/span>)\n\n            <span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #008000;\">any<\/span>(word <span style=\"color: #a2f; font-weight: bold;\">in<\/span> text<span style=\"color: #666;\">.<\/span>lower() <span style=\"color: #008000; font-weight: bold;\">for<\/span> word <span style=\"color: #a2f; font-weight: bold;\">in<\/span> (<span style=\"color: #ba2121;\">\"ship\"<\/span>, <span style=\"color: #ba2121;\">\"free\"<\/span>, <span style=\"color: #ba2121;\">\"delivery\"<\/span>)):\n                shipping <span style=\"color: #666;\">=<\/span> text\n                <span style=\"color: #008000; font-weight: bold;\">break<\/span>\n\n        <span style=\"color: #3d7b7b; font-style: italic;\"># Grab the first link that points to an item detail page<\/span>\n        url <span style=\"color: #666;\">=<\/span> <span style=\"color: #008000; font-weight: bold;\">None<\/span>\n\n        <span style=\"color: #008000; font-weight: bold;\">for<\/span> a <span style=\"color: #a2f; font-weight: bold;\">in<\/span> card<span style=\"color: #666;\">.<\/span>select(<span style=\"color: #ba2121;\">\"a.s-card__link\"<\/span>):\n            href <span style=\"color: #666;\">=<\/span> a<span style=\"color: #666;\">.<\/span>get(<span style=\"color: #ba2121;\">\"href\"<\/span>)\n\n            <span style=\"color: #008000; font-weight: bold;\">if<\/span> href <span style=\"color: #a2f; font-weight: bold;\">and<\/span> <span style=\"color: #ba2121;\">\"\/itm\/\"<\/span> <span style=\"color: #a2f; font-weight: bold;\">in<\/span> href:\n                url <span style=\"color: #666;\">=<\/span> href<span style=\"color: #666;\">.<\/span>split(<span style=\"color: #ba2121;\">\"?\"<\/span>)[<span style=\"color: #666;\">0<\/span>]\n                <span style=\"color: #008000; font-weight: bold;\">break<\/span>\n\n        listings<span style=\"color: #666;\">.<\/span>append({\n            <span style=\"color: #ba2121;\">\"title\"<\/span>: title,\n            <span style=\"color: #ba2121;\">\"price\"<\/span>: price_el<span style=\"color: #666;\">.<\/span>get_text(<span style=\"color: #ba2121;\">\" \"<\/span>, strip<span style=\"color: #666;\">=<\/span><span style=\"color: #008000; font-weight: bold;\">True<\/span>) <span style=\"color: #008000; font-weight: bold;\">if<\/span> price_el <span style=\"color: #008000; font-weight: bold;\">else<\/span> <span style=\"color: #008000; font-weight: bold;\">None<\/span>,\n            <span style=\"color: #ba2121;\">\"condition\"<\/span>: condition_el<span style=\"color: #666;\">.<\/span>get_text(<span style=\"color: #ba2121;\">\" \"<\/span>, strip<span style=\"color: #666;\">=<\/span><span style=\"color: #008000; font-weight: bold;\">True<\/span>) <span style=\"color: #008000; font-weight: bold;\">if<\/span> condition_el <span style=\"color: #008000; font-weight: bold;\">else<\/span> <span style=\"color: #008000; font-weight: bold;\">None<\/span>,\n            <span style=\"color: #ba2121;\">\"shipping\"<\/span>: shipping,\n            <span style=\"color: #ba2121;\">\"url\"<\/span>: url,\n        })\n\n    <span style=\"color: #008000; font-weight: bold;\">return<\/span> listings\n<\/code><\/pre>\n<p>Duas coisas que vale a pena saber.<\/p>\n<ul>\n<li>O eBay sempre coloca um <strong>cart\u00e3o de lugar-marcador do \u201cShop on eBay\u201d<\/strong> no topo dos resultados de busca. Se voc\u00ea n\u00e3o pular isso, o primeiro item da lista de resultados vai ser s\u00f3 lixo in\u00fatil. <\/li>\n<li>O t\u00edtulo tamb\u00e9m pega \u201cAbre em uma nova janela ou aba\u201d como <strong>texto de acessibilidade<\/strong> da tag \u00e2ncora, para que a linha de substitui\u00e7\u00e3o limpe isso antes que qualquer coisa seja acrescentada.<\/li>\n<\/ul>\n<h3>Passo 4: Salve os resultados<\/h3>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #008000; font-weight: bold;\">def<\/span> <span style=\"color: #00f;\">main<\/span>():\n    <span style=\"color: #008000;\">print<\/span>(<span style=\"color: #ba2121;\">f\"Fetching data from: <\/span><span style=\"color: #a45a77; font-weight: bold;\">{<\/span>SEARCH_URL<span style=\"color: #a45a77; font-weight: bold;\">}<\/span><span style=\"color: #ba2121;\">\"<\/span>)\n\n    html <span style=\"color: #666;\">=<\/span> fetch_html(SEARCH_URL)\n    listings <span style=\"color: #666;\">=<\/span> extract_listings(html)\n\n    <span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #a2f; font-weight: bold;\">not<\/span> listings:\n        <span style=\"color: #008000; font-weight: bold;\">raise<\/span> <span style=\"color: #cb3f38; font-weight: bold;\">SystemExit<\/span>(<span style=\"color: #ba2121;\">\"No listings found. eBay may have changed its markup.\"<\/span>)\n\n    <span style=\"color: #008000; font-weight: bold;\">with<\/span> <span style=\"color: #008000;\">open<\/span>(OUTPUT_FILE, <span style=\"color: #ba2121;\">\"w\"<\/span>, encoding<span style=\"color: #666;\">=<\/span><span style=\"color: #ba2121;\">\"utf-8\"<\/span>) <span style=\"color: #008000; font-weight: bold;\">as<\/span> file:\n        json<span style=\"color: #666;\">.<\/span>dump(listings, file, indent<span style=\"color: #666;\">=2<\/span>)\n\n    <span style=\"color: #008000;\">print<\/span>(<span style=\"color: #ba2121;\">f\"Found <\/span><span style=\"color: #a45a77; font-weight: bold;\">{<\/span><span style=\"color: #008000;\">len<\/span>(listings)<span style=\"color: #a45a77; font-weight: bold;\">}<\/span><span style=\"color: #ba2121;\"> listings\"<\/span>)\n    <span style=\"color: #008000;\">print<\/span>(<span style=\"color: #ba2121;\">f\"Saved results to <\/span><span style=\"color: #a45a77; font-weight: bold;\">{<\/span>OUTPUT_FILE<span style=\"color: #a45a77; font-weight: bold;\">}<\/span><span style=\"color: #ba2121;\">\"<\/span>)\n\n\n<span style=\"color: #008000; font-weight: bold;\">if<\/span> <span style=\"color: #19177c;\">__name__<\/span> <span style=\"color: #666;\">==<\/span> <span style=\"color: #ba2121;\">\"__main__\"<\/span>:\n    main()\n<\/code><\/pre>\n<p>Execute o script:<\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code>python ebay_scraper.py\n<\/code><\/pre>\n<p>E voc\u00ea deve ver algo assim:<\/p>\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code>[\n  {\n    <span style=\"color: #008000; font-weight: bold;\">\"title\"<\/span>: <span style=\"color: #ba2121;\">\"MSI Forge GK600 TKL Wireless Mechanical Keyboard RGB Bluetooth 2.4GHz\"<\/span>,\n    <span style=\"color: #008000; font-weight: bold;\">\"price\"<\/span>: <span style=\"color: #ba2121;\">\"$49.99\"<\/span>,\n    <span style=\"color: #008000; font-weight: bold;\">\"condition\"<\/span>: <span style=\"color: #ba2121;\">\"Brand New\"<\/span>,\n    <span style=\"color: #008000; font-weight: bold;\">\"shipping\"<\/span>: <span style=\"color: #ba2121;\">\"Free shipping\"<\/span>,\n    <span style=\"color: #008000; font-weight: bold;\">\"url\"<\/span>: <span style=\"color: #ba2121;\">\"https:\/\/www.ebay.com\/itm\/227344950627\"<\/span>\n  }\n]\n<\/code><\/pre>\n<p><img decoding=\"async\" class=\"alignnone wp-image-45845 size-full\" src=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image2-5.png\" alt=\"Lista de teclados de computador \u00e0 venda\" width=\"1119\" height=\"697\" srcset=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image2-5.png 1119w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image2-5-300x187.png 300w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image2-5-1024x638.png 1024w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/06\/image2-5-768x478.png 768w\" sizes=\"(max-width: 1119px) 100vw, 1119px\" \/><\/p>\n<p>\u00c9 assim que o scraper b\u00e1sico funciona.<\/p>\n<p>A partir daqui, para mudar a palavra-chave, basta alterar <code>_nkw=mechanical+keyboard<\/code> na URL. Se quiser outra p\u00e1gina, voc\u00ea pode ir de <code>_pgn=1<\/code> para <code>_pgn=2<\/code>, <code>_pgn=3<\/code> e assim por diante. <\/p>\n<h2>Solu\u00e7\u00e3o de problemas<\/h2>\n<p>Ent\u00e3o, \u00e9 \u00f3bvio: se voc\u00ea ficar vasculhando o eBay por tempo suficiente, provavelmente vai encontrar um desses:<\/p>\n<ul>\n<li><strong>Erros 403:<\/strong> o eBay bloqueou seu IP. A solu\u00e7\u00e3o \u00e9 usar o Web Unlocker com IPs residenciais. <\/li>\n<li><strong>Respostas vazias:<\/strong> geralmente \u00e9 um problema de renderiza\u00e7\u00e3o. Confere se voc\u00ea est\u00e1 lendo o campo ` <code>html<\/code> ` na resposta do Web Unlocker, e n\u00e3o o corpo JSON bruto. <\/li>\n<li><strong>Campos em falta:<\/strong> nem todos os an\u00fancios t\u00eam informa\u00e7\u00f5es sobre o estado do produto ou o frete preenchidas. As verifica\u00e7\u00f5es preventivas em <code>extract_listings<\/code> j\u00e1 cuidam disso. <\/li>\n<li><strong>Nenhum resultado:<\/strong> o eBay mudou os nomes das classes CSS de novo. Volta pro playground, d\u00e1 uma olhada na nova marca\u00e7\u00e3o e atualiza seus seletores. <\/li>\n<\/ul>\n<h2>Seu pr\u00f3ximo passo<\/h2>\n<p>Olha, o eBay n\u00e3o \u00e9 o site mais complicado de se lidar, mas entre os CAPTCHAs, a limita\u00e7\u00e3o de solicita\u00e7\u00f5es e o fato de que a margem de lucro \u00e0s vezes muda do nada, tentar fazer isso sem a configura\u00e7\u00e3o certa s\u00f3 vai te fazer perder tempo. Usar um servi\u00e7o que cuida de tudo isso significa que voc\u00ea vai direto para a parte de realmente trabalhar com os dados. <\/p>\n<p>\u00c9 nisso que <a href=\"https:\/\/floppydata.com\/web-unlocker\/\">o Web Unlocker da Floppydata<\/a> se destaca. Rota\u00e7\u00e3o de proxies residenciais, impress\u00f5es digitais reais de navegadores, renderiza\u00e7\u00e3o de p\u00e1gina inteira, e voc\u00ea s\u00f3 paga pelas respostas bem-sucedidas, ent\u00e3o as tentativas de scraping que derem errado n\u00e3o te custam nada. Joga l\u00e1 umas linhas de BeautifulSoup e, sinceramente, tudo fica bem simples.  <\/p>\n<p>Cada conta nova vem com cinco tentativas gr\u00e1tis, ent\u00e3o voc\u00ea pode seguir todo esse guia sem pagar nada.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O eBay tem uma mina de ouro de dados p\u00fablicos sobre pre\u00e7os. Milh\u00f5es de an\u00fancios ativos em itens colecion\u00e1veis, eletr\u00f4nicos, pe\u00e7as fora de linha, o que voc\u00ea quiser \u2014 tudo isso \u00e9 \u00fatil para acompanhar pre\u00e7os, fazer pesquisa de mercado ou an\u00e1lise da concorr\u00eancia. O problema \u00e9 conseguir acessar esses dados de forma confi\u00e1vel. Um [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":45806,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[441,491,564],"tags":[],"class_list":["post-45891","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-how-to","category-scraping"],"acf":[],"_links":{"self":[{"href":"https:\/\/floppydata.com\/pt-br\/wp-json\/wp\/v2\/posts\/45891","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/floppydata.com\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/floppydata.com\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/floppydata.com\/pt-br\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/floppydata.com\/pt-br\/wp-json\/wp\/v2\/comments?post=45891"}],"version-history":[{"count":0,"href":"https:\/\/floppydata.com\/pt-br\/wp-json\/wp\/v2\/posts\/45891\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/floppydata.com\/pt-br\/wp-json\/wp\/v2\/media\/45806"}],"wp:attachment":[{"href":"https:\/\/floppydata.com\/pt-br\/wp-json\/wp\/v2\/media?parent=45891"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/floppydata.com\/pt-br\/wp-json\/wp\/v2\/categories?post=45891"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/floppydata.com\/pt-br\/wp-json\/wp\/v2\/tags?post=45891"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}