Com o contínuo crescimento exponencial da economia digital, coletar dados de várias fontes, como APIs, sites e bancos de dados, se tornou mais importante do que nunca.
Uma forma comum de extrair dados é por meio de web scraping. O web scraping envolve o uso de ferramentas automatizadas para buscar páginas web e analisar seu conteúdo para extrair informações específicas para posterior análise e uso. Casos de uso comuns incluem pesquisa de mercado, monitoramento de preços e agregação de dados.
A implementação do web scraping envolve lidar com conteúdo dinâmico, gerenciar sessões e cookies, contornar medidas antiscraping e garantir a conformidade legal. Esses desafios exigem ferramentas e técnicas avançadas para uma extração eficaz de dados. O ChatGPT pode ajudar com essas complexidades, aproveitando seus recursos de processamento de linguagem natural para gerar código e solucionar erros.
Neste artigo, você aprenderá a usar o ChatGPT para gerar código de extração de dados para sites baseados principalmente em conteúdo HTML estático e para sites complexos que empregam técnicas mais complexas de geração de páginas.
Pré-requisitos
Antes de começar este tutorial, certifique-se de ter o seguinte:
- Familiaridade com Python
- Um ambiente Python instalado e configurado em sua máquina usando o Visual Studio Code
- Uma conta no ChatGPT
Quando você usa o ChatGPT para gerar seus scripts de web scraping, há duas etapas principais:
- Documente cada etapa que o código precisa seguir para encontrar as informações a serem extraídas, como quais elementos HTML devem ser visados, caixas de texto a serem preenchidas e botões a serem clicados. Muitas vezes, você precisará copiar o seletor do elemento HTML específico. Para fazer isso, clique com o botão direito do mouse no elemento específico da página que você deseja copiar e clique em Inspecionar. O Chrome destaca o elemento DOM específico. Clique com o botão direito do mouse e escolha Copiar > Copiar seletor para que o caminho do seletor HTML seja copiado para sua área de transferência:
- Crie prompts específicos e detalhados no ChatGPT para gerar o código de extração de dados.
- Execute e teste o código gerado.
Extraindo dados de sites com HTML estático usando o ChatGPT
Agora que você está familiarizado com o fluxo de trabalho geral, vamos usar o ChatGPT para extrair dados de alguns sites com elementos em HTML estático . Para começar, você extrairá os títulos e os preços dos livros em https://books.toscrape.com.
Inicialmente, você precisa identificar os elementos HTML que contêm os dados necessários:
- O seletor para o título do livro é
#default > div.container-fluid.page > div > div > div > section > div:nth-child(2) > ol > li:nth-child(1) > article > h3 > a
. - O seletor para o preço do livro é *
#default > div.container-fluid.page > div > div > div > section > div:nth-child(2) > ol > li:nth-child(1) > article > div.product_price > p.price_color
.
Em seguida, você precisa criar prompts específicos e detalhados no ChatGPT para gerar o código de extração de dados. Para fazer isso, você precisa instruir o ChatGPT a instalar todos os pacotes Python necessários, orientá-lo na extração de seletores HTML (que você identificou anteriormente) e, em seguida, pedir que ele salve os dados como um arquivo do Excel.
Não se esqueça de definir a versão do ChatGPT como GPT-4o.
Você pode inserir algo assim no ChatGPT:
Você é um especialista em web scraping que utiliza a biblioteca Beautiful Soup do Python e todas as ferramentas de automação necessárias. Quero que você gere um script detalhado, passo a passo, para extrair dados de
https://books.toscrape.com
. Por favor, faça o seguinte:
- Instale todos os pacotes Python necessários.
- Extraia o título do livro, que tem o seletor HTML
#default > div.container-fluid.page > div > div > div > section > div:nth-child(2) > ol > li:nth-child(1) > article > h3 > a
, e o preço do livro (somente o número, nada mais), que tem o seletor#default > div.container-fluid.page > div > div > div > section > div:nth-child(2) > ol > li:nth-child(1) > article > div.product_price > p.price_color
.- Extraia a lista de todos os títulos e preços dos livros e armazene-a em um arquivo Excel.
- Extraia somente a primeira página.
Observe: você pode receber uma resposta ligeiramente diferente.
Na resposta, o ChatGPT instrui você a executar o seguinte comando para instalar a biblioteca Beautiful Soup, que faz o web scraping, e a pandas library, uma biblioteca abrangente de análise de dados que armazena dados como um arquivo do Excel:
pip3 install requests beautifulsoup4 pandas openpyxl
Você notará que o ChatGPT também sugere a instalação do openpyxl, mas isso não é necessário aqui.
O ChatGPT também fornece o seguinte código de web scraping:
import requests
from bs4 import BeautifulSoup
import pandas as pd
# URL of the website
url = 'https://books.toscrape.com'
# Send a GET request to the website
response = requests.get(url)
if response.status_code == 200:
# Parse the HTML content of the page
soup = BeautifulSoup(response.content, 'html.parser')
# Initialize lists to store the titles and prices
book_titles = []
book_prices = []
# Extract the first book title and price using the provided selectors
book_title_selector = "#default > div.container-fluid.page > div > div > div > section > div:nth-child(2) > ol > li:nth-child(1) > article > h3 > a"
book_price_selector = "#default > div.container-fluid.page > div > div > div > section > div:nth-child(2) > ol > li:nth-child(1) > article > div.product_price > p.price_color"
title_element = soup.select_one(book_title_selector)
price_element = soup.select_one(book_price_selector)
if title_element and price_element:
book_titles.append(title_element.get('title'))
book_prices.append(price_element.text.strip()[1:])
# Extract all book titles and prices on the first page
books = soup.select('section > div:nth-child(2) > ol > li')
for book in books:
title = book.select_one('h3 > a')
price = book.select_one('div.product_price > p.price_color')
if title and price:
book_titles.append(title.get('title'))
book_prices.append(price.text.strip()[1:])
# Create a DataFrame from the lists
df = pd.DataFrame({
'Title': book_titles,
'Price': book_prices
})
# Save the DataFrame to an Excel file
df.to_excel('books_scraped.xlsx', index=False)
print('Data has been successfully scraped and saved to books_scraped.xlsx')
else:
print('Failed to retrieve the webpage')
Esse código importa o módulo requests
, que realiza chamadas HTTP para o site do qual ele extrai dados. Ele também importa pacotes da pandas que armazenam dados extraídos em arquivos do Excel. O código define o URL base do site e os seletores HTML específicos que ele visa para buscar os dados solicitados.
Em seguida, o código chama o site e coloca seu conteúdo como um objeto BeautifulSoup
chamado soup
. O código pega os valores do título e do preço do livro como listas do objeto soup
usando os seletores HTML. Por fim, o código cria um DataFrame pandas a partir da lista de títulos e preços dos livros e o salva como um arquivo do Excel.
Em seguida, você precisa salvar o código em um arquivo chamado books_scraping.py
e executar o comando python3 books_scraping.py
na linha de comando. Esse código gera um arquivo do Excel chamado books_scraped.xlsx
no mesmo diretório de books_scraping.py
:
Agora que você viu um exemplo passo a passo, vamos avançar neste tutorial e extrair dados de outro site simples: https://quotes.toscrape.com, que contém uma coleção de citações.
Novamente, vamos começar identificando a sequência de etapas.
Se você estiver usando o Chrome, encontre os seguintes seletores HTML:
body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span.text
para extrair a citaçãobody > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span:nth-child(2) > small
para identificar o autor
Depois de identificar os seletores HTML que você deseja extrair, você pode redigir um prompt detalhado, como o seguinte, para gerar o código de extração:
Você é um especialista em web scraping que utiliza a biblioteca Beautiful Soup do Python e todas as ferramentas de automação necessárias. Quero que você gere um script detalhado, passo a passo, para extrair dados de
https://quotes.toscrape.com
. Por favor, faça o seguinte:
- Instale todos os pacotes Python necessários.
- Extraia a citação, que tem o seletor HTML
body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span.text
, e o nome do autor, que tem o seletorbody > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span:nth-child(2) > small
.- Extraia a lista de todas as citações e autores e armazene-a em um arquivo do Excel.
- Extraia somente a primeira página.
Depois de inserir essas informações, o ChatGPT deve fornecer o seguinte comando, que instala as bibliotecas Beautiful Soup, pandas e openpyxl:
pip3 install requests beautifulsoup4 pandas openpyxl
O ChatGPT também deve fornecer o seguinte código de web scraping:
import requests
from bs4 import BeautifulSoup
import pandas as pd
# Step 1: Fetch the web page content
url = "https://quotes.toscrape.com"
response = requests.get(url)
html_content = response.text
# Step 2: Parse the HTML content using BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# Step 3: Extract the specific quote and author
quote_selector = "body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span.text"
author_selector = "body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span:nth-child(2) > small"
specific_quote = soup.select_one(quote_selector).get_text()
specific_author = soup.select_one(author_selector).get_text()
print(f"Specific Quote: {specific_quote}")
print(f"Specific Author: {specific_author}")
# Step 4: Extract all quotes and authors
quotes = soup.find_all('div', class_='quote')
all_quotes = []
for quote in quotes:
text = quote.find('span', class_='text').get_text()
author = quote.find('small', class_='author').get_text()
all_quotes.append({"quote": text, "author": author})
# Step 5: Save the quotes to an Excel file
df = pd.DataFrame(all_quotes)
df.to_excel('quotes.xlsx', index=False)
print("Quotes have been saved to quotes.xlsx")
soup = BeautifulSoup(html_content, 'html.parser')
# Step 3: Extract the specific quote and author
quote_selector = "body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span.text"
author_selector = "body > div.container > div:nth-child(2) > div.col-md-8 > div:nth-child(1) > span:nth-child(2) > small"
specific_quote = soup.select_one(quote_selector).get_text()
specific_author = soup.select_one(author_selector).get_text()
print(f"Specific Quote: {specific_quote}")
print(f"Specific Author: {specific_author}")
# Step 4: Extract all quotes and authors
quotes = soup.find_all('div', class_='quote')
all_quotes = []
for quote in quotes:
text = quote.find('span', class_='text').get_text()
author = quote.find('small', class_='author').get_text()
all_quotes.append({"quote": text, "author": author})
# Step 5: Save the quotes to an Excel file
df = pd.DataFrame(all_quotes)
df.to_excel('quotes.xlsx', index=False)
print("Quotes have been saved to quotes.xlsx")
Salve esse código em um arquivo chamado quotes_scraping.py
e execute o comando python3 books_scraping.py
na linha de comando. Esse código gera um arquivo do Excel chamado quotes_scraped.xlsx
no mesmo diretório de quotes_scraping.py
. Abra o arquivo do Excel gerado e ele deverá ter a seguinte aparência:
Extraindo dados de sites complexos
Extrair dados de sites complexos pode ser um desafio porque o conteúdo dinâmico geralmente é carregado via JavaScript, o que ferramentas como requests
e BeautifulSoup
não conseguem manipular. Esses sites podem exigir interações, como clicar em botões ou rolar a página para acessar todos os dados. Para enfrentar esse desafio, você pode usar o WebDriver, que renderiza páginas como um navegador e simula interações do usuário, garantindo que todo o conteúdo seja acessível da mesma forma que seria para um usuário comum.
Por exemplo, Yelp é um site de avaliação de empresas via crowdsourcing. O Yelp se baseia na geração dinâmica de páginas e precisa simular várias interações do usuário. Aqui, você usará o ChatGPT para gerar um código de extração que recupera uma lista de empresas em Estocolmo e suas avaliações.
Para extrair dados do Yelp, vamos começar documentando as etapas que você seguirá:
- Encontre o seletor da caixa de texto de localização que o script usará. Nesse caso, é
#search_location
. Digite “Estocolmo” na caixa de pesquisa de localização e encontre o seletor do botão de pesquisa. Nesse caso, é#header_find_form > div.y-css-1iy1dwt > button
. Clique no botão de pesquisa para ver os resultados. Isso pode levar alguns segundos. Encontre um seletor que contenha o nome da empresa (ou seja,#main-content > ul > li:nth-child(3) > div.container_\_09f24_\_FeTO6.hoverable_\_09f24_\__UXLO.y-css-way87j > div > div.y-css-cxcdjj > div:nth-child(1) > div.y-css-1iy1dwt > div:nth-child(1) > div > div > h3 > a
):
- Encontre o seletor que contém a avaliação da empresa (ou seja,
#main-content > ul > li:nth-child(3) > div.container_\_09f24_\_FeTO6.hoverable_\_09f24_\__UXLO.y-css-way87j > div > div.y-css-cxcdjj > div:nth-child(1) > div.y-css-1iy1dwt > div:nth-child(2) > div > div > div > div.y-css-ohs7lg > span.y-css-jf9frv
):
- Encontre o seletor do botão Aberto agora . É este aqui
#main-content > div.stickyFilterOnSmallScreen_\_09f24_\_UWWJ3.hideFilterOnLargeScreen_\_09f24_\_ilqIP.y-css-9ze9ku > div > div > div > div > div > span > button:nth-child(3) > span
:
- Salve uma cópia da página web para que você possa carregá-la mais tarde, junto com o prompt do ChatGPT para ajudar o ChatGPT a entender o contexto dos prompts. No Chrome, você pode fazer isso clicando nos três pontos no canto superior direito e clicando em Salvar e compartilhar > Salvar página como:
Em seguida, usando os valores do seletor que você extraiu anteriormente, você precisa redigir um prompt detalhado para orientar o ChatGPT na geração do script de extração:
Você é um especialista em web scraping. Quero que você faça o scraping de https://www.yelp.com/ para extrair informações específicas. Siga estas etapas antes de extrair dados:
- Limpe a caixa com o seletor
#search_location
.- Digite “Estocolmo” na caixa de pesquisa com o seletor
#search_location
.- Clique no botão com o seletor
#header_find_form > div.y-css-1iy1dwt > button
.- Aguarde alguns segundos para que a página carregue os resultados da pesquisa.
- Clique no botão Aberto agora, que tem o seletor
#main-content > div.stickyFilterOnSmallScreen_\_09f24_\_UWWJ3.hideFilterOnLargeScreen_\_09f24_\_ilqIP.y-css-9ze9ku > div > div > div > div > div > span > button:nth-child(3) > span
, para filtrar as empresas que estão abertas agora.- Crie uma lista com os nomes das empresas. O nome da empresa tem o seletor
#main-content > ul > li:nth-child(3) > div.container_\_09f24_\_FeTO6.hoverable_\_09f24_\__UXLO.y-css-way87j > div > div.y-css-cxcdjj > div:nth-child(1) > div.y-css-1iy1dwt > div:nth-child(1) > div > div > h3 > a
.- Crie uma lista com as avaliações das empresas. As avaliações têm o seletor
#main-content > ul > li:nth-child(3) > div.container_\_09f24_\_FeTO6.hoverable_\_09f24_\__UXLO.y-css-way87j > div > div.y-css-cxcdjj > div:nth-child(1) > div.y-css-1iy1dwt > div:nth-child(2) > div > div > div > div.y-css-ohs7lg > span.y-css-jf9frv
.- Crie um arquivo do Excel com os nomes das empresas e suas avaliações.
- Certifique-se de instalar todos os pacotes Python relevantes.
- Use o WebDriver da Selenium para automatizar o processo.
- Consulte a cópia anexa da página HTML de resultados para contextualizar o formato HTML.
Depois de inserir essas informações, o ChatGPT solicita que você instale o Selenium, a estrutura de automação web que suporta o WebDriver e a pandas:
pip3 install selenium pandas
O ChatGPT também fornece alguns códigos de scraping junto com uma explicação:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import time
# Initialize the WebDriver
driver = webdriver.Chrome()
try:
# Open Yelp
driver.get('https://www.yelp.com/')
# Clear the location search box
location_box = driver.find_element(By.CSS_SELECTOR, '#search_location')
location_box.clear()
# Enter "Stockholm" in the location search box
location_box.send_keys('Stockholm')
# Click the search button
search_button = driver.find_element(By.CSS_SELECTOR, '#header_find_form > div.y-css-1iy1dwt > button')
search_button.click()
# Wait for search results to load
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#main-content'))
)
# Click on "Open Now" filter
open_now_button = driver.find_element(By.CSS_SELECTOR, '#main-content > div.stickyFilterOnSmallScreen__09f24__UWWJ3.hideFilterOnLargeScreen__09f24__ilqIP.y-css-9ze9ku > div > div > div > div > div > span > button:nth-child(3) > span')
open_now_button.click()
# Wait for the filter results to load
time.sleep(5)
# Extract business names and reviews
business_names = []
business_reviews = []
businesses = driver.find_elements(By.CSS_SELECTOR, '#main-content > ul > li')
for business in businesses:
try:
name = business.find_element(By.CSS_SELECTOR, 'div.container__09f24__FeTO6.hoverable__09f24___UXLO.y-css-way87j > div > div.y-css-cxcdjj > div:nth-child(1) > div.y-css-1iy1dwt > div:nth-child(1) > div > div > h3 > a').text
review = business.find_element(By.CSS_SELECTOR, 'div.container__09f24__FeTO6.hoverable__09f24___UXLO.y-css-way87j > div > div.y-css-cxcdjj > div:nth-child(1) > div.y-css-1iy1dwt > div:nth-child(2) > div > div > div > div.y-css-ohs7lg > span.y-css-jf9frv').text
business_names.append(name)
business_reviews.append(review)
except Exception as e:
print(f"Error extracting data for a business: {e}")
# Create a DataFrame and save to Excel
df = pd.DataFrame({'Business Name': business_names, 'Reviews': business_reviews})
df.to_excel('stockholm_businesses.xlsx', index=False)
print("Data saved to stockholm_businesses.xlsx")
finally:
# Close the WebDriver
driver.quit()
Salve esse script e execute-o usando Python no Visual Studio Code. Você notará que o código inicia o Chrome, navega até o Yelp, limpa a caixa de texto de localização, insere “Estocolmo”, clica no botão de pesquisa, filtra as empresas que estão abertas agora e fecha a página. Depois disso, o resultado da extração de dados é salvo no arquivo do Excel stockholm_bussinsess.xlsx
:
Todo o código-fonte para esse tutorial está disponível no GitHub.
Conclusão
Neste tutorial, você aprendeu a usar o ChatGPT para extrair informações específicas de sites com renderização HTML estática e sites mais complexos com geração dinâmica de páginas, links externos de JavaScript e interações do usuário.
Embora a extração de dados de um site como o Yelp tenha sido simples, na realidade, a extração de estruturas HTML complexas na web pode ser um desafio, e você provavelmente enfrentará banimentos de IP e CAPTCHAs.
Para facilitar, a Bright Data oferece uma ampla variedade de serviços de coleta de dados, incluindo serviços de proxy avançados para ajudar a contornar banimentos de IP, Web Unlocker para contornar e resolver CAPTCHAs, APIs de Web Scraping para extração automatizada de dados e um Scraping Browser para extração eficiente de dados.
Registre-se agora e descubra todos os produtos que a Bright Data tem a oferecer. Comece com um teste grátis hoje!
Não é necessário cartão de crédito