Web Semântica com Python: HTTP, HTML e Crawlers

Web Semântica com Python: HTTP, HTML e Crawlers

Explore como funciona a World Wide Web, suas tecnologias centrais (URLs, HTTP, HTML) e como usar Python para acessar, baixar e processar conteúdo da Web, incluindo um crawler simples como estudo de caso.

Conteúdos-chave

Este material aborda os fundamentos da Web, APIs da biblioteca padrão do Python para Web e o uso de parsers HTML para extrair dados.

1. Metadados e SEO (Conteúdo Demonstrativo)

Variações de título (SEO) utilizadas para indicar ferramentas de otimização de indexação. Abaixo, as 3 variações e a escolha final:

  • Variação A (escolhida como título final): Web Semântica com Python: HTTP, HTML e Crawlers
  • Variação B: Web com Python: HTTP, HTML e Web Crawlers — Guia Prático
  • Variação C: Guia de Web com Python: HTTP, HTML e Crawlers (Web)
<title>Web Semântica com Python: HTTP, HTML e Crawlers</title>
<meta name="description" content="Explora a Web, HTTP, HTML e como Python usa urllib.request e HTMLParser para acessar, baixar e processar páginas, com estudo de caso de crawler.">
<meta name="keywords" content="Web, HTTP, HTML, Python, urllib.request, HTMLParser, web crawler">
<meta property="og:title" content="Web Semântica com Python: HTTP, HTML e Crawlers">
<meta property="og:description" content="Explora a Web, HTTP, HTML e como Python usa urllib.request e HTMLParser para acessar, baixar e processar páginas, com estudo de caso de crawler.">

2. Explicação detalhada dos tópicos

2.1 A World Wide Web

A World Wide Web é um sistema distribuído de documentos ligados por hyperlinks, hospedados em servidores Web. Ela funciona com a interação entre clientes (navegadores) e servidores Web, usando URLs para identificar recursos, HTTP como protocolo de comunicação e HTML como linguagem de publicação para páginas.

Exemplo rápido: um navegador (cliente) solicita uma página com HTTP; o servidor responde com o código 200 e o conteúdo HTML.

2.2 API WWW do Python

O módulo urllib.request fornece ferramentas para solicitar e baixar recursos da Web. A função urlopen(url) aceita um URL, retorna uma resposta HTTP completa (HTTPResponse) e permite ler o conteúdo com read().

Exemplo básico: from urllib.request import urlopen response = urlopen('http://www.w3.org/Consortium/facts.html') print(type(response)) # <class 'http.client.HTTPResponse'>

Para obter o conteúdo textual, leia os bytes com read() e decodifique para Unicode:

html = response.read()
text = html.decode()

Observação: alguns recursos podem ser binários (vídeos, áudios), por isso read() retorna bytes; para HTML, decodificar para string facilita o processamento com operações de string.

2.3 HTML e HTMLParser

O HTML é composto por elementos (tags). O módulo html.parser oferece HTMLParser, uma classe que pode ser estendida para processar tokens de HTML. O método feed(content) alimenta o HTMLParser com o conteúdo da página; os manipuladores (handle_starttag, handle_endtag, handle_data) são chamados conforme aparecem tokens.

Exemplos úteis:

  • handle_starttag(tag, attrs) é invocado para cada tag de início. É possível extrair atributos, como href em tags a.
  • handle_data(dados) é chamado com o conteúdo textual entre as tags.

Exemplo de

from html.parser import HTMLParser

class LinkParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag == 'a':
            for attr in attrs:
                if attr[0] == 'href':
                    print(attr[1])

2.4 Collector: colete hyperlinks HTTP absolutos

Collector estende HTMLParser para coletar apenas URLs absolutas que utilizam HTTP. Usa urljoin(base_url, href) para transformar href relativo em absoluto e verifica se o esquema é http.

from urllib.parse import urljoin
from html.parser import HTMLParser

class Collector(HTMLParser):
    def __init__(self, url):
        HTMLParser.__init__(self)
        self.url = url
        self.links = []

    def handle_starttag(self, tag, attrs):
        if tag == 'a':
            for attr in attrs:
                if attr[0] == 'href':
                    absolute = urljoin(self.url, attr[1])
                    if absolute[:4] == 'http':
                        self.links.append(absolute)

    def getLinks(self):
        return self.links

2.5 Exercício prático

Desenvolver uma classe MyHTMLParser que imprime a hierarquia de abertura/fechamento de tags, com recuo correspondente à profundidade na árvore do documento. Ignore tags que não exigem fechamento (como p e br).

class MyHTMLParser(HTMLParser):
    # implementação esperada: imprimir "tag start" / "tag end" com indentação apropriada
    pass

Observação: o exercício pede imprimir a estrutura com recuo, simulando a árvore DOM de um documento HTML.

3. Resumo dos Tópicos

  1. Tópico 1: World Wide Web
    1. Conceitos-chave: URL, HTTP, HTML, hyperlinks.
    2. Arquitetura cliente-servidor: navegador (cliente) vs servidor Web.
  2. Tópico 2: API WWW do Python (urllib.request)
    1. urlopen(url): solicita o recurso e retorna HTTPResponse.
    2. read() e decode(): ler conteúdo binário e converter para string.
    3. Exemplo prático: obter source de uma página.
  3. Tópico 3: HTMLParser e processamento de HTML
    1. LinkParser: Extração de href de tags .
    2. Collector: hrefs transformados em URLs absolutas; coleta apenas HTTP.
    3. urljoin(base, relative): converte URLs relativas em absolutas.
  4. Tópico 4: Exercícios e casos
    1. Caso: implementações de analisadores HTML, contagem de ocorrências, etc.
    2. Exemplos: contagem de ocorrências de palavras, extração de links.

4. Mapa mental (Mermaid)

mindmap root((WWW & Python)) sub1(World Wide Web) sub1a(URLs) sub1b(Protocolo HTTP) sub1c(HTML) sub2(Python API) sub2a(urlopen) sub2b(HTTPResponse) sub2c(decode/read) sub3(HTMLParser) sub3a(LinkParser) sub3b(Collector) sub3c(MyHTMLParser)

5. Questões de múltipla escolha

Questão 1 (média) — Sobre urllib.request.urlopen()

Resposta correta: C) Retorna um objeto HTTPResponse representando a resposta HTTP

O método urlopen() retorna um HTTPResponse, que encapsula a resposta do servidor e permite ler o conteúdo com read().

Questão 2 (difícil) — Sobre HTMLParser

Resposta correta: B) handle_starttag é o manipulador usado para extrair atributos como href

Para obter o href, o código redefine handle_starttag e procura o atributo href entre attrs.

Questão 3 (difícil) — URL relativo vs absoluto

Resposta correta: C) urljoin(base, relative) transforma relativo em absoluto

Exemplo: urljoin('http://exemplo.org/pagina.html', '/contato') resulta em http://exemplo.org/contato.

Questão 4 (extremamente difícil) — Collector

Resposta correta: B) Coleta apenas URLs HTTP absolutas, transformando hrefs relativos via urljoin

Collector utiliza urljoin para tornar hrefs relativos em absolutos e filtra por http.

Pontuação Total 0.00