Este guia aborda os conceitos fundamentais de Python necessários para iniciar no desenvolvimento de web scraping.
- Estruturas de Controle de Fluxo
1.1. Condicionais (if/else)
A estrutura if/else permite a execução de blocos de código com base na avaliação de uma condição. Se a condição for verdadeira, o código dentro do bloco if é executado; caso contrário, o bloco else é executado.
if condicao:
# Executar se a condição for verdadeira
pass
else:
# Executar se a condição for falsa
pass
Em web scraping, essa estrutura é útil para lidar com variações na estrutura dos dados ou páginas. Por exemplo, ao extrair informações de uma página, você pode encontrar dados incompletos ou em formatos inesperados.
Cenário 1: Dados Indesejados
dado_bruto = "10,Ação Específica,15.000.000" # Dado útil
dado_indesejado = "11,-,-" # Dado a ser ignorado
# Pseudocódigo ilustrando a lógica
if " - " not in dado_bruto:
processar(dado_bruto)
else:
ignorar()
Cenário 2: Múltiplas Estruturas de Página
Ao lidar com páginas que podem ter layouts diferentes, pode ser necessário empregar múltiplos extratores ou uma lógica adaptativa:
# Pseudocódigo para lógica adaptativa
extrator_padrao = ExtratorPaginaPadrao()
extrator_alternativo = ExtratorPaginaAlternativa()
pagina_html = carregar_pagina("url_exemplo.com")
resultado_padrao = extrator_padrao.extrair(pagina_html)
if resultado_padrao:
salvar_dados(resultado_padrao)
else:
resultado_alternativo = extrator_alternativo.extrair(pagina_html)
if resultado_alternativo:
salvar_dados(resultado_alternativo)
else:
print("Nenhum dado extraído.")
1.2. Loops (while)
O loop while repete um bloco de código enquanto uma condição especificada permanecer verdadeira. Assim que a condição se torna falsa, a execução do loop é interrompida.
while condicao:
# Bloco de código a ser repetido
pass
Loops while são ideais para tarefas que requerem repetição contínua, como a paginação em um site, onde você continua extraindo dados até que não haja mais páginas para processar.
1.3. Valores Booleanos (True/False) e Avaliação de Veracidade
Em Python, True representa verdadeiro e False representa falso. É crucial entender como diferentes tipos de dados são avaliados em um contexto booleano:
# Valores considerados False em um contexto booleano
print(bool(0)) # Inteiro zero
print(bool("")) # String vazia
print(bool([])) # Lista vazia
print(bool({})) # Dicionário vazio
print(bool(set())) # Conjunto vazio
print(bool(tuple())) # Tupla vazia
print(bool(None)) # Valor None
# Qualquer outro valor é geralmente considerado True.
# Essa característica é muito útil em web scraping.
Podemos usar essa propriedade para verificar se uma extração retornou algum resultado:
# Pseudocódigo para verificação de resultado
dados_extraidos = extrator.buscar_dados(elemento_html)
if dados_extraidos:
# Se dados_extraidos não for vazio (ou seja, True), processar
processar_resultados(dados_extraidos)
else:
# Se dados_extraidos for vazio (ou seja, False), lidar com a ausência de dados
print("Nenhum dado encontrado.")
- Manipulação de Strings
Operações eficientes com strings são indispensáveis em web scraping para limpar e processar o texto extraído de páginas web.
2.1. Indexação e Fatiamento
Strings em Python são sequências que podem ser acessadas por índice (posição) ou fatiadas para extrair subconjuntos de caracteres. A indexação começa em 0.
texto = "Python para Web Scraping"
print(texto[0]) # Saída: P
print(texto[7]) # Saída: p
# Fatiamento: [início:fim] (o índice 'fim' não é incluído)
print(texto[0:6]) # Saída: Python
print(texto[11:16]) # Saída: para
2.2. Remoção de Espaços em Branco (strip())
Dados extraídos de páginas web frequentemente contêm caracteres de espaço em branco indesejados (espaços, tabulações, quebras de linha) no início ou fim. O método strip() remove esses caracteres.
texto_com_espacos = " \t\tTexto com espaços em branco\r\r \n\n "
texto_limpo = texto_com_espacos.strip()
print(f"'{texto_limpo}'") # Saída: 'Texto com espaços em branco'
2.3. Divisão de Strings (split())
O método split() divide uma string em uma lista de substrings com base em um delimitdaor especificado. É muito útil para parsear dados estruturados.
linha_dados = "ID001,Filme Ação,50.000.000"
partes = linha_dados.split(",")
nome_filme = partes[1]
print(nome_filme) # Saída: Filme Ação
# Desempacotamento direto em variáveis
id_item, nome_item, quantia = linha_dados.split(",")
print(f"ID: {id_item}, Nome: {nome_item}, Quantia: {quantia}")
2.4. Substituição de Substrings (replace())
O método replace() substitui todas as ocorrências de uma substring por outra.
texto_formatado = "Eu \t\t\nGosto Muito de Chá "
texto_corrigido = texto_formatado.replace(" ", " ").replace("\t", "").replace("\n", "") # Exemplo simplificado
print(texto_corrigido) # Saída: Eu Gosto Muito de Chá