DeepSeek Web Scraping: Transforme HTML de Table-Soup em JSON Limpo
Scraping and Proxy Management Expert
Resumo:
- DeepSeek é o motor de extração econômico, e ganha o título em markup bagunçado. Uma execução ao vivo neste guia extraiu 10 registros estruturados — texto, autor, lista de tags — de uma página de tabela aninhada para 3.397 tokens em um modelo com preço abaixo de um centavo por milhão de tokens de entrada.
- A API é uma troca de
base_url. O endpoint do DeepSeek é compatível com OpenAI: o SDK oficial do OpenAI Python apontando parahttps://api.deepseek.comcom modo JSON ativado é toda a integração. - Os nomes dos modelos mudaram recentemente — a maioria dos tutoriais está desatualizada. Os modelos atuais são
deepseek-v4-flashedeepseek-v4-pro; os longamente familiares nomesdeepseek-chatedeepseek-reasonerestão obsoletos desde 24-Jul-2026. - O modelo ainda não pode buscar. Renderização, sessões e desafios de acesso pertencem a uma camada de busca; a deste guia é um POST por página através da API Universal Scraping da Scrapeless.
- Sem a chave DeepSeek ainda? A solicitação idêntica é executada através do OpenRouter. Este guia a executou ao vivo em
deepseek/deepseek-v4-flashe mostra a saída capturada. - Gratuito para começar do lado da busca. Crie sua chave API da Scrapeless em app.scrapeless.com.
O DeepSeek consegue extrair sites?
O DeepSeek lê páginas; ele não as recupera. A API recebe o texto que você já buscou e retorna os campos que você nomeia — e, como seu preço por token está na parte inferior do mercado, é o modelo que as pessoas buscam quando a extração precisa rodar em muitas páginas. Buscar essas páginas, renderizar seu JavaScript e sobreviver a seus controles de acesso é uma camada separada que nenhum endpoint de conclusão de chat fornece.
Onde o DeepSeek brilha é no markup que você menos gostaria de analisar manualmente. HTML semântico é gentil com os seletores; páginas reais muitas vezes não são. O alvo da demonstração neste guia é uma página de citações renderizada inteiramente como tabelas aninhadas — sem classes nas células de dados, texto de citação, autores e tags intercalados linha por linha — o tipo de estrutura onde a lógica de seletores se transforma em aritmética de contagem de linhas que morre na próxima reformulação. Um modelo de linguagem não se importa: ele lê a tabela da mesma maneira que uma pessoa.
O plano: buscar a página de sopa de tabelas uma vez com uma camada de busca controlada, e então ter o DeepSeek retornando JSON limpo. Se seu interesse é a categoria de ferramentas mais ampla, o explicador sobre scrapers LLM e a lista classificada de scrapers LLM mapeiam o campo.
Instalação
Um SDK cobre tanto o caminho nativo quanto o caminho do agregador, além de requests para buscar:
bash
pip install "openai==2.34.0" requests
Configuração
bash
export DEEPSEEK_API_KEY="sk-sua_chave_deepseek"
export SCRAPELESS_API_KEY="sk_sua_chave_scrapeless"
Busque a página que ninguém quer analisar
O alvo é uma renderização baseada em tabela de um site público de citações construído para prática de scraping. Um POST para a API Universal Scraping a retorna com renderização e desbloqueio tratados no lado do servidor:
python
# fetch_tableful.py — recuperar a página de sopa de tabelas através da Scrapeless
import os
import requests
resp = requests.post(
"https://api.scrapeless.com/api/v1/unlocker/request",
headers={
"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
},
json={
"actor": "unlocker.webunlocker",
"input": {"url": "https://quotes.toscrape.com/tableful/", "method": "GET"},
},
timeout=120,
)
resp.raise_for_status()
html = resp.json().get("data", "")
print(f"buscou {len(html):,} caracteres")
print("elementos de tabela:", html.count("<table"), "| linhas de tabela:", html.count("<tr"))
with open("page.html", "w", encoding="utf-8") as f:
f.write(html)
A execução imprime uma <table> e 22 linhas <tr> para o que é conceitualmente dez registros com tags — linhas de citações e linhas de tags se alternando, exatamente a forma que a especificação de tabelas HTML permite e que os autores de seletores temem.
Implementação básica: DeepSeek como extractor
A integração é o SDK da OpenAI com dois valores específicos do DeepSeek: a URL base e o nome do modelo. O modo JSON (response_format={"type": "json_object"}) e temperature=0 tornam a saída analisável e estável — os parâmetros estão documentados em a referência da API DeepSeek. Use os nomes dos modelos atuais: deepseek-v4-flash para trabalho de extração, deepseek-v4-pro quando você realmente precisar de mais modelo; os nomes mais antigos deepseek-chat e deepseek-reasoner estão obsoletos desde 24-Jul-2026.
Nota: Este bloco precisa de uma
DEEPSEEK_API_KEYcom crédito — o único pré-requisito que este guia não assume. A próxima seção executa a extração idêntica ao vivo através do OpenRouter, com saída capturada.
python
# extract_deepseek.py — extração nativa DeepSeek (requer DEEPSEEK_API_KEY)
import json
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.deepseek.com",
api_key=os.environ["DEEPSEEK_API_KEY"],
)
page_html = open("page.html", encoding="utf-8").read()
completion = client.chat.completions.create(
model="deepseek-v4-flash",
temperature=0,
response_format={"type": "json_object"},
messages=[
{
"role": "system",
"content": 'Extraia cada citação desta página baseada em tabela. Responda SOMENTE com JSON: '
'{"quotes":[{"text":str,"author":str,"tags":[str]}]}.',
},
{"role": "user", "content": page_html},
],
)
data = json.loads(completion.choices[0].message.content)
print(f"extraídos {len(data['quotes'])} citações da marcação da tabela")
Sem aritmética de linha, sem XPath de eixo irmão — o esquema nomeia a saída e o modelo faz a leitura.
Sem chave DeepSeek? Execute através do OpenRouter
Como ambas as superfícies têm formato da OpenAI, a variante agregadora difere por duas strings. Esta é a versão que este guia executou de verdade, busca e extração em um único script autônomo:
python
# extract_openrouter.py — a mesma extração, executada via OpenRouter
import json
import os
import requests
from openai import OpenAI
resp = requests.post(
"https://api.scrapeless.com/api/v1/unlocker/request",
headers={
"Content-Type": "application/json",
"x-api-token": os.environ["SCRAPELESS_API_KEY"],
},
json={
"actor": "unlocker.webunlocker",
"input": {"url": "https://quotes.toscrape.com/tableful/", "method": "GET"},
},
timeout=120,
)
resp.raise_for_status()
page_html = resp.json().get("data", "")
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
completion = client.chat.completions.create(
model="deepseek/deepseek-v4-flash",
temperature=0,
response_format={"type": "json_object"},
messages=[
{
"role": "system",
"content": 'Extraia cada citação desta página baseada em tabela. Responda SOMENTE com JSON: '
'{"quotes":[{"text":str,"author":str,"tags":[str]}]}.',
},
{"role": "user", "content": page_html},
],
)
data = json.loads(completion.choices[0].message.content)
print(f"extraídos {len(data['quotes'])} citações da marcação da tabela")
print(json.dumps(data["quotes"][0], ensure_ascii=False))
A execução ao vivo extraiu todos os 10 registros da sopa da tabela, o primeiro:
text
extraídos 10 citações da marcação da tabela
{"text": "O mundo como o criamos é um processo do nosso pensamento. Não pode ser mudado sem mudar nosso pensamento.", "author": "Albert Einstein", "tags": ["mudança", "pensamentos profundos", "pensamento", "mundo"]}
As tags vieram como arrays, embora a página as renderize em uma linha separada da citação em si — o modelo associou cada linha de tag com a linha de citação acima, que é exatamente a junção que um script seletor deve codificar manualmente. A chamada inteira: 3.397 tokens.
Obtenha sua chave de API no plano gratuito: app.scrapeless.com
Padrões avançados
- Reserve o modelo para páginas que merecem. DeepSeek é barato por token, e um script seletor ainda é mais barato: gratuito. Roteie layouts limpos e estáveis para código seletor gerado e revisado e gaste chamadas de modelo na sopa de tabela, naqueles sensíveis a redesign e na cauda longa.
- Declare a semântica das linhas quando souber. Nesta página, o prompt não precisava disso, mas em tabelas mais difíceis, uma frase — "cada registro abrange duas linhas: dados, depois etiquetas" — garante precisão mais barata do que um modelo maior.
- Mantenha uma página por chamada e faça loop em Python. Os limites das páginas são os limites dos registros; o agrupamento do lado do prompt os desfoca.
- Fique de olho no calendário de obsolescência. Os nomes dos modelos fixos envelhecem.
deepseek-chatfuncionou por um longo período e para de funcionar em 24-Jul-2026 — coloque os ids dos modelos na configuração, não em dez scripts.
Resolução de problemas
modelo_não_encontradoou similar no endpoint nativo. Você provavelmente está enviando um nome de modelo obsoleto; mude paradeepseek-v4-flashoudeepseek-v4-pro.- Prosa em vez de JSON. O modo JSON está desligado — defina
response_format={"type": "json_object"}e mantenha o esquema na mensagem do sistema. - Mesclagem de registros ou tags caem na citação errada. Adicione a frase de semântica de linha à mensagem do sistema e verifique se o HTML recuperado realmente contém as linhas que você espera, da maneira como o script de recuperação as conta.
- A saída varia entre as execuções.
temperature=0. A extração é uma tarefa de transcrição, não uma tarefa de escrita.
Conclusão
O caso do DeepSeek para a camada de extração é aritmética mais tolerância: preços de tokens no fundo do mercado e nenhuma preocupação com markup que pune a lógica do seletor. A demonstração da tabela é a prova — 10 registros com arrays de tags corretamente unidas a partir de linhas anônimas <tr>, para 3.397 tokens. O que o modelo não pode fornecer é a página em si, renderizada e acessível; um POST do lado do servidor por página cobre esse lado, e as duas camadas juntas formam um scraper que custa quase nada para rodar e pouco para manter quando o markup muda.
Pronto para alimentar o DeepSeek com páginas reais?
A camada de recuperação aqui é a Universal Scraping API — planos e volumes de solicitação estão na página de preços, com cada parâmetro unlocker.webunlocker na documentação do desenvolvedor. Crie uma chave no plano gratuito em app.scrapeless.com e ambos os scripts funcionam como escrito.
FAQ
Q: O DeepSeek pode raspar sites por conta própria?
Não. A API do DeepSeek é um endpoint de modelo de linguagem: ela extrai de texto que você fornece e não pode emitir solicitações, renderizar JavaScript ou manter sessões. Cada configuração de raspagem do DeepSeek funciona em parceria com uma camada de recuperação que retorna conteúdo de página fiel.
Q: Qual modelo do DeepSeek devo usar para raspagem na web?
deepseek-v4-flash para extração — a execução ao vivo neste guia o utilizou e retornou todos os 10 registros com joins de tag corretos. Acesse deepseek-v4-pro apenas quando a entrada limpa ainda produzir campos errados. Evite os nomes obsoletos deepseek-chat e deepseek-reasoner em novo código.
Q: Por que usar DeepSeek em vez de um modelo de nome maior para extração?
Preço com igual adequação. A extração com esquema limitado a temperature=0 é uma tarefa com limites que a maioria dos modelos atuais passa; quando todos passam, o modelo mais barato vencedor. A execução medida aqui custou 3.397 tokens em um modelo precificado abaixo de 10 centavos por milhão de tokens de entrada — a esse preço, a extração deixa de ser a parte cara do pipeline.
Q: Quando um script de seletor ainda é melhor que o DeepSeek?
Quando o layout é limpo, estável e de alto volume. Um script de seletor revisado não custa nada por página para sempre; uma chamada ao modelo custa tokens a cada vez. A divisão funcional: seletores para o núcleo estável de seus alvos, DeepSeek para markup emaranhado e layouts que continuam mudando.
Q: É legal raspar com DeepSeek?
O modelo de extração não altera as regras de coleta. Recupere apenas páginas públicas, respeite os termos do site e as diretivas de robots padronizadas pelo Protocolo de Exclusão de Robots, mantenha volumes limitados, e trate quaisquer dados pessoais de acordo com a legislação aplicável — além dos termos de uso do DeepSeek do lado do modelo.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



