---
title: "Extração de texto: um tutorial passo a passo"
slug: text-scraping
date: 2024-11-03T15:42:46+00:00
modified: 2025-11-04T08:54:32+00:00
permalink: https://brightdata.com.br/blog/dados-do-site/text-scraping
type: blog
---

[ Blog ](https://brightdata.com.br/blog "Blog") / [Dados do site](https://brightdata.com.br/blog/dados-do-site)







 [Dados do site](https://brightdata.com.br/blog/dados-do-site)

# Extração de texto: um tutorial passo a passo

Este guia aborda a extração de texto em Python, da configuração ao armazenamento de dados, com dicas sobre o uso de proxies para evitar bloqueios de IP.

 13 min de leitura





 [ ![Bright Data favicon](https://media.brightdata.com.br/2021/05/favicon_512.svg) ](https://brightdata.com/blog/authors/dimitrije-stamenic)

 [Dimitrije Stamenic

 ](https://brightdata.com/blog/authors/dimitrije-stamenic)





 ![Text scraping tutorial blog image](https://media.brightdata.com.br/2024/11/Scraping_-Step-By-Step-Tutorial-1.svg)





[Extração de dados da web](https://brightdata.com.br/blog/procedimentos/what-is-web-scraping) (ou web scraping) é o processo de extrair dados de sites. Como os dados podem assumir várias formas, o termo *captura de texto* é usado especificamente quando se refere à coleta de dados textuais.

Ter uma grande quantidade de dados relevantes é essencial para cada decisão comercial bem-sucedida. A coleta de informações de sites concorrentes pode fornecer uma visão da lógica de negócios deles, o que pode ajudá-lo a obter uma vantagem competitiva. Neste tutorial, você aprenderá como implementar um raspador de texto em [Python](https://www.python.org/), facilitando a extração e o uso de dados da web.

## <a></a>Pré-requisitos

Antes de começar este tutorial, você precisa dos seguintes pré-requisitos:

- A versão mais recente de Python e [pip](https://pip.pypa.io/en/stable/installation/) instalada em seu sistema.
- Um [ambiente virtual](https://docs.python.org/3/library/venv.html) Python. Certifique-se de instalar todos os pacotes necessários no ambiente virtual, incluindo [requests](https://requests.readthedocs.io/en/latest/) para buscar o conteúdo HTML de uma página da web, [Beautiful Soup](https://beautiful-soup-4.readthedocs.io/en/latest/) para analisar e extrair o texto ou dados desejados do HTML e [pandas](https://pandas.pydata.org/docs/) para organizar e armazenar os dados extraídos em um formato estruturado, como um arquivo CSV.

Se você estiver procurando por mais informações para ajudá-lo a começar a fazer web scraping com Python, confira [este artigo](https://brightdata.com.br/blog/procedimentos/web-scraping-with-python).

## <a></a>Entendendo a estrutura do site

Antes de começar a extrair, você precisa analisar a estrutura do site que está segmentando. Os sites são criados usando HTML, que é uma linguagem de marcação que define como o conteúdo é organizado e exibido.

Cada parte do conteúdo, seja um título, parágrafo ou link, está dentro de tags HTML. Essas tags ajudam a identificar onde os dados que você deseja coletar estão localizados. Por exemplo, neste exemplo, você extrai as aspas de [Quotes to Scrape](https://quotes.toscrape.com/), um site simulado. Para visualizar a estrutura deste site, você precisa abrir o site em seu navegador e acessar as **Ferramentas de desenvolvedor** clicando com o botão direito na página e selecionando **Inspecionar** ou **Inspecionar elemento**. Isso abre o código HTML da página:

![Inspecionar elemento em um navegador da web](https://media.brightdata.com/2024/11/image-1024x451.png)Reserve algum tempo para se familiarizar com a estrutura — procure tags como `<div>`, `<span>`, `<p>` e `<a>` pois elas geralmente contêm o texto ou links que você talvez queira extrair. Além disso, observe que as tags geralmente contêm um atributo `class`. Sua finalidade é definir uma classe específica para o elemento HTML, permitindo que ele seja estilizado com CSS ou selecionado com JavaScript.

> **Nota:** o atributo `class` é particularmente útil na captura de texto porque ajuda você a segmentar elementos específicos em uma página que compartilham o mesmo estilo ou estrutura, facilitando a extração dos dados exatos de que você precisa.

Aqui, cada citação está contida em um elemento `div` com a classe `quote`. Se você estiver interessado no texto e no autor de cada citação, o texto está contido em um `div` com a classe `text`, e o autor está contido em um `pequeno` elemento com a classe de `author`:

![Estrutura HTML de uma citação](https://media.brightdata.com/2024/11/image-1-1024x452.png)Se você não está familiarizado com o funcionamento do HTML, confira este artigo [sobre web scraping em HTML](/blog/procedimentos/html-web-scraping) para saber mais.

## <a></a>Captura de texto em um site

Com a estrutura do site em mente, a próxima etapa é escrever o código que você usará para copiar o site [Quotes to Scrape](https://quotes.toscrape.com/).

Python é uma escolha popular para essa tarefa devido à sua facilidade de uso e bibliotecas poderosas, incluindo `requests` e `BeautifulSoup`. Você usa a biblioteca `requests` para buscar o conteúdo HTML da página. Ela é necessária porque você precisa recuperar os dados brutos antes de poder analisá-los ou extraí-los. Depois de ter o conteúdo HTML, você pode dividi-lo em uma estrutura mais gerenciável usando `BeautifulSoup`.

Para começar, crie um arquivo Python para o script de captura de texto chamado `text-scraper.py`. Em seguida, importe `BeautifulSoup` e `requests`:

```none
import requests
from bs4 import BeautifulSoup

```

Especifique a URL do site que está copiando e envie uma solicitação GET:

```none
# URL of the quotes website
url = 'https://quotes.toscrape.com/'

# Send a GET request to the URL
response = requests.get(url)

```

Depois de enviar a solicitação GET, você recebe o HTML de uma página inteira. É necessário analisá-lo para extrair apenas os dados necessários, que nesse caso são o texto e o autor de cada citação. Para fazer isso, a primeira coisa que você precisa fazer é criar um objeto `BeautifulSoup` para analisar o HTML:

```none
soup = BeautifulSoup(response.text, 'html.parser')

```

Encontre todos os elementos `div` que contêm aspas (o que significa que eles são da classe `quote`):

```none
quotes = soup.find_all('div', class_='quote')

```

Crie uma lista para armazenar as aspas em:

```none
data = []

```

Em seguida, extraia o texto e o autor de cada citação e armazene-os na lista `data`:

```none
for quote in quotes:
    text = quote.find('span', class_='text').text.strip()
    author = quote.find('small', class_='author').text.strip()

    data.append({
        'Text': text,
        'Author': author
    })

```

O script deve ter uma aparência semelhante a esta:

```none
import requests
from bs4 import BeautifulSoup

# URL of the quotes website
url = 'http://quotes.toscrape.com/'

# Send a GET request to the URL
response = requests.get(url)

# Create a BeautifulSoup object to parse the HTML
soup = BeautifulSoup(response.text, 'html.parser')

# Find all quote containers
quotes = soup.find_all('div', class_='quote')

# Extract data from each quote
data = []
for quote in quotes:
    text = quote.find('span', class_='text').text.strip()
    author = quote.find('small', class_='author').text.strip()

    data.append({
        'Text': text,
        'Author': author
    })

print(data)

```

Agora é hora de executar o script a partir do seu terminal:

```none
# For Linux and macOS
python3 text-scraper.py

# For Windows
python text-scraper.py

```

Você deve obter uma lista das citações extraídas exibida na tela:

```none
[{'Author': 'Albert Einstein',
  'Text': '"The world as we have created it is a process of our thinking. It '
        'cannot be changed without changing our thinking."'},
 {'Author': 'J.K. Rowling',
  'Text': '"It is our choices, Harry, that show what we truly are, far more '
        'than our abilities."'},
 {'Author': 'Albert Einstein',
  'Text': '"There are only two ways to live your life. One is as though '
        'nothing is a miracle. The other is as though everything is a '
        'miracle."'},
 {'Author': 'Jane Austen',
  'Text': '"The person, be it gentleman or lady, who has not pleasure in a '
        'good novel, must be intolerably stupid."'},
 {'Author': 'Marilyn Monroe',
  'Text': ""Imperfection is beauty, madness is genius and it's better to be "
        'absolutely ridiculous than absolutely boring."'},
 {'Author': 'Albert Einstein',
  'Text': '"Try not to become a man of success. Rather become a man of '
        'value."'},
 {'Author': 'André Gide',
  'Text': '"It is better to be hated for what you are than to be loved for '
        'what you are not."'},
 {'Author': 'Thomas A. Edison',
  'Text': ""I have not failed. I've just found 10,000 ways that won't work.""},
 {'Author': 'Eleanor Roosevelt',
  'Text': '"A woman is like a tea bag; you never know how strong it is until '
        "it's in hot water.""},
 {'Author': 'Steve Martin',
  'Text': '"A day without sunshine is like, you know, night."'}]

```

Embora essa captura de texto pareça bastante simples, você provavelmente enfrentará desafios durante a extração de dados da web, como bloqueio de IP, se o site detectar muitas solicitações, ou CAPTCHAs para impedir o acesso automatizado. Para superar esses desafios, você pode usar [proxies](https://brightdata.com.br/blog/proxies-101/what-is-proxy-server).

## <a></a>Usando proxies para extração anônima

Os proxies ajudam você [a evitar e contornar bloqueios de IP](https://brightdata.com.br/blog/proxies-101/how-to-bypass-an-ip-ban) e CAPTCHAs, alternando seu endereço IP e fazendo com que suas solicitações pareçam vir de locais diferentes. Para usar proxies, você precisa configurar o método `request.get ()` para rotear todas as solicitações por meio de um servidor proxy.

Nesse cenário, você usa os proxies rotativos [Bright Data](https://brightdata.com.br/solutions/rotating-proxies), que fornecem acesso a mais de 400M+ monthly de endereços IP de mais de 195 países. Para começar, crie uma conta gratuita na Bright Data selecionando **Iniciar teste gratuito** no canto superior direito, preenchendo o formulário de registro e clicando em **Criar conta**:

![Formulário de inscrição da Bright Data](https://media.brightdata.com/2024/11/image-2-1024x515.png)### <a></a>Criar um proxy residencial básico

Depois de criar sua conta Bright Data, faça login e navegue até a seção **Proxies &amp; Scraping**. Na seção **Redes proxy** , encontre **proxies residenciais** e clique em **Começar**:

![Painel de dados Bright Data: seção **Proxies e scraping**](https://media.brightdata.com/2024/11/image-3-1024x515.png)Você receberá uma solicitação para adicionar uma nova zona para o proxy residencial. Mantenha todos os padrões, nomeie a zona e clique em **Adicionar**:

![Crie uma nova zona de proxy residencial ](https://media.brightdata.com/2024/11/image-4-1024x515.png)E isso é tudo o que é preciso para criar uma nova zona de proxy residencial!

Para usar o proxy, você precisa de suas credenciais (*ou seja,* nome de usuário, senha e host). Para encontrar essas credenciais, vá para a seção **Proxies &amp; Scraping** novamente e selecione a zona de proxy que você acabou de criar:

![Lista de zonas de proxy criadas](https://media.brightdata.com/2024/11/image-5-1024x515.png)Depois de clicar na zona proxy, você verá o painel de controle da zona. Na seção **Autorização**, você vê suas credenciais:

![credenciais de proxy da Bright Data](https://media.brightdata.com/2024/11/image-6-1024x515.png)### <a></a>Atualize o script de extração

Agora que você tem suas credenciais de proxy, é hora de configurar o proxy. Para começar, armazene suas credenciais como variáveis:

```none
host = 'brd.superproxy.io'
port = 22225

username = 'brd-customer-<customer_id>-zone-<zone_name>'
password = '<zone_password>'

```

Em seguida, crie um URL de proxy com as credenciais armazenadas:

```none
proxy_url = f'http://{username}:{password}@{host}:{port}'

```

Crie uma configuração de proxy para solicitações HTTP e HTTPS:

```none
proxies = {
    'http': proxy_url,
    'https': proxy_url
}

```

E adicione a configuração de proxy à chamada `requests.get()`:

```none
response = requests.get(url, proxies=proxies)

```

Neste momento, seu script PHP deverá estar assim:

```none
import requests
from bs4 import BeautifulSoup

# BrightData credentials
host = 'brd.superproxy.io'
port = 22225

username = 'brd-customer-<customer_id>-zone-<zone_name>'
password = '<zone_password>'

# Compose a proxy URL
proxy_url = f'http://{username}:{password}@{host}:{port}'

# Create a proxy configuration
proxies = {
    'http': proxy_url,
    'https': proxy_url
}

# URL of the quotes website
url = 'http://quotes.toscrape.com/'

# Send a GET request to the URL via the specified proxy
response = requests.get(url, proxies=proxies)

# Create a BeautifulSoup object to parse the HTML
soup = BeautifulSoup(response.text, 'html.parser')

# Find all quote containers
quotes = soup.find_all('div', class_='quote')

# Extract data from each quote
data = []
for quote in quotes:
    text = quote.find('span', class_='text').text.strip()
    author = quote.find('small', class_='author').text.strip()

    data.append({
        'Text': text,
        'Author': author
    })

print(data)

```

### <a></a>Execute e teste o script

A execução desse script fornece o mesmo resultado do script sem proxies. A diferença é que o site do qual você está extraindo dados agora pensa que a solicitação vem de outro lugar, mantendo sua localização real privada. Vamos ilustrar escrevendo um novo script simples.

Importe as bibliotecas necessárias e defina o `url` como `"http://lumtest.com/myip.json"` no script:

```none
import requests
from bs4 import BeautifulSoup

url = "http://lumtest.com/myip.json"

```

Envie uma solicitação GET para o `url` sem uma configuração de proxy e crie um objeto `BeautifulSoup` para a resposta:

```none
# Send a GET request to the URL
response = requests.get(url)

# Create a BeautifulSoup object to parse the HTML
soup = BeautifulSoup(response.text, 'html.parser')

```

Finalmente, imprima o objeto `soup` :

```none
print(soup)

```

Execute esse script. Em seguida, você obtém informações sobre seu endereço IP e localização como resposta.

Para comparar, configure a solicitação GET para usar um proxy Bright Data e deixe todo o resto igual:

```none
# BrightData credentials
host = 'brd.superproxy.io'
port = 22225

username = 'brd-customer-hl_459f8bd4-zone-test_residential_proxy'
password = '8sdgouh1dq5h'

proxy_url = f'http://{username}:{password}@{host}:{port}'

proxies = {
    'http': proxy_url,
    'https': proxy_url
}

# Send a GET request to the URL
response = requests.get(url, proxies=proxies)

```

Ao executar o script atualizado, você deve ver que está recebendo um endereço IP diferente como resposta; esse não é o seu IP real, mas o endereço IP de um proxy que você configurou. Você está essencialmente escondendo seu endereço IP atrás de um dos servidores proxy.

## <a></a>Armazenando dados

Depois de coletar dados de um site com sucesso, a próxima etapa é armazená-los em um formato estruturado que permita fácil acesso e análise. O CSV é popular por isso, pois é amplamente suportado por ferramentas de análise de dados e linguagens de programação.

Para salvar dados copiados em um arquivo CSV, comece importando a biblioteca `pandas` (na parte superior do script de extração), pois ela tem métodos para converter dados no formato CSV:

```none
import pandas as pd

```

Em seguida, crie um objeto pandas DataFrame a partir dos dados coletados:

```none
df = pd.DataFrame(data)

```

Finalmente, converta o DataFrame em um arquivo CSV e dê a ele um nome (*por exemplo* `quotes.csv`):

```none
df.to_csv('quotes.csv', index=False)

```

Depois de fazer essas alterações, execute o script. Em seguida, você obtém os dados copiados armazenados no arquivo CSV.

Neste exemplo simples, não há muito que você possa fazer com as citações. No entanto, dependendo dos dados coletados, existem várias maneiras de analisá-los para extrair insights.

Você pode começar explorando estatísticas descritivas usando a função [`describe()` do pandas](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.describe.html). Essa função fornece uma visão geral rápida de seus dados numéricos, incluindo média, mediana e desvio padrão. Você pode visualizar seus dados usando [Matplotlib](https://matplotlib.org/) ou [seaborn](https://seaborn.pydata.org/) para criar histogramas, gráficos de dispersão ou gráficos de barras, ajudando você a identificar padrões ou tendências visualmente. Para dados textuais, considere usar técnicas de processamento de linguagem natural, como análise de frequência de palavras ou análise de sentimentos, para entender temas comuns ou sentimentos gerais em resenhas ou comentários.

Para obter insights mais profundos, procure correlações entre diferentes variáveis em seu conjunto de dados. Por exemplo, você pode examinar a relação entre as avaliações de livros e comprimento das resenhas, ou analisar como as avaliações variam em diferentes gêneros ou autores. Use a função pandas `groupby()` para agregar dados e comparar métricas entre categorias.

Não se esqueça de considerar o contexto de seus dados e as perguntas que você está tentando responder. Por exemplo, se você estiver analisando resenhas de livros, poderá investigar quais fatores contribuem mais para altas classificações ou identificar tendências em gêneros populares ao longo do tempo. Seja sempre crítico com as suas descobertas e considere possíveis vieses em seu processo de coleta de dados.

## <a></a>Conclusão

Neste tutorial, você aprendeu a raspar textos com Python, explorou os benefícios do uso de proxies e descobriu como os proxies rotativos [Bright Data](/) podem ajudá-lo a evitar bloqueios de IP e manter o anonimato.

Embora o desenvolvimento de suas próprias soluções de scraping possa ser gratificante, geralmente traz desafios, como manter o código, lidar com CAPTCHAs e manter a conformidade com as políticas do site. É aqui que as [APIs de coleta de dados da Bright Data](https://brightdata.com.br/products/web-scraper) podem ajudar. Com recursos como [resolução automática de CAPTCHA](https://brightdata.com.br/products/web-unlocker/captcha-solver), rotação de IP e análise robusta de dados, a Bright Data simplifica o processo de coleta e permite que você se concentre na análise de dados em vez do gerenciamento da infraestrutura.

Inscreva-se para um teste gratuito da Bright Data para ver como a Bright Data pode aprimorar seus projetos de web scraping, fornecendo soluções de coleta de dados confiáveis, escaláveis e eficientes para suas necessidades comerciais.



Contate-nosTeste grátis![google social icon](/wp-content/themes/brightdata/assets/images/ic_google.svg)









 Índice







Dedicated Scraper APIs &amp; No-Code Scrapers

Over 1000 scrapers for all popular domains. Simplify your web scraping.

[See pricing](/pricing/web-scraper "See pricing")

Just want data? Skip scraping.

Hundreds of ready-to-use datasets from all popular domains.

[See pricing](/pricing/datasets "See pricing")







 [ ](https://news.ycombinator.com/submitlink?t=Extra%C3%A7%C3%A3o+de+texto%3A+um+tutorial+passo+a+passo&u=https://brightdata.com.br/blog/dados-do-site/text-scraping) [ ](https://www.linkedin.com/shareArticle?mini=true&title=Extra%C3%A7%C3%A3o+de+texto%3A+um+tutorial+passo+a+passo&url=https://brightdata.com.br/blog/dados-do-site/text-scraping) [ ](http://www.reddit.com/submit?title=Extra%C3%A7%C3%A3o+de+texto%3A+um+tutorial+passo+a+passo&url=https://brightdata.com.br/blog/dados-do-site/text-scraping)







##  Você também pode estar interessado em

 [ ![OpenHuman with Bright Data](https://media.brightdata.com.br/2026/09/OpenHuman-with-Bright-Data.png) ](https://brightdata.com.br/blog/ai/openhuman-with-bright-data "Acesso à Web Pronto para Produção no OpenHuman Através do Bright Data CLI")

 [AI



 ![Antonello Zanini](https://media.brightdata.com.br/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Acesso à Web Pronto para Produção no OpenHuman Através do Bright Data CLI

Integre o Bright Data CLI ao OpenHuman para habilitar acesso à web pronto para produção e coleta de dados para agentes de IA.



 09-Sep-2026

 14 min de leitura

 ](https://brightdata.com.br/blog/ai/openhuman-with-bright-data)

 [ ![Multimodal Web Scraping with MiniMax](https://media.brightdata.com.br/2026/09/Multimodal-Web-Scraping-with-MiniMax.png) ](https://brightdata.com.br/blog/dados-do-site/multimodal-web-scraping-with-minimax "Scraping de Dados Multimodal com MiniMax")

 [Dados do site



 ![Antonello Zanini](https://media.brightdata.com.br/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Scraping de Dados Multimodal com MiniMax

Combine a API Web Unlocker da Bright Data com a visão MiniMax M3 para extrair dados estruturados de imagens e capturas de tela de páginas web.



 09-Sep-2026

 5 min de leitura

 ](https://brightdata.com.br/blog/dados-do-site/multimodal-web-scraping-with-minimax)

 [ ![The 10 Best CLI Tools for Codex in 2026](https://media.brightdata.com.br/2026/08/The-10-Best-CLI-Tools-for-Codex-in-2026.png) ](https://brightdata.com.br/blog/ai/best-cli-tools-for-codex "As 10 Melhores Ferramentas CLI para Codex em 2026 – Testadas & Classificadas")

 [AI



 ![Daniel Shashko](https://media.brightdata.com.br/2022/04/Daniel-Shashko-2-50x50.png)

Daniel Shashko

Web Data &amp; AI Expert





### As 10 Melhores Ferramentas CLI para Codex em 2026 – Testadas &amp; Classificadas

As 10 ferramentas CLI que tornam o Codex mais rápido e capaz, começando com o Bright Data CLI para acesso real à web de dentro do sandbox.



 06-Sep-2026

 24 min de leitura

 ](https://brightdata.com.br/blog/ai/best-cli-tools-for-codex)
