ICE-B
9 - Internet
Internet
Resumo
■ Introdução às redes de computadores e à Internet
■ Obtenção de dados da Internet usando Python
2
Internet
Redes
Uma rede permite partilhar recuros e informação
■ Infraestrutura de troca de
mensagens
■ Liga computadores para
trocar informação e partilhar recursos
■ E.g. Pesquisa no Google:
• Enviamos a pergunta
• Usamos os servidores
• Obtemos o resultado
4
Redes
Transferência entre dois computadores
■ Emissor: produz e envia uma mensagem (sequência de bytes)
■ Receptor: recebe a sequência de bytes
■ Rede: infraestrutura que inclui:
• Meios de ligação (cabos, fibra óptica, radio, satélite)
• Computadores dedicados a encaminhar a mensagem
Rede de computadores
Redes
Rede local (LAN, Local Area Network)
■ Os computadores estão ligados directamente
• cada um pode enviar bytes directamente a qualquer outro.
■ Distância entre computadores tipicamente menor que 1km.
Rede de larga escala (WAN, Wide Area Network)
■ Emissor e o destinatário estão em redes locais distintas
■ É preciso encaminhar os bytes por equipamento especializado
(routers e gateways) que escolhem o caminho até ao destino final • Router gere ligação entre computadores numa rede ou redes do mesmo tipo
6
Redes
Mensagens em pacotes
■ Para chegar ao destinatário, a mensagem é enviada em pacotes
endereçados
• Cada computador tem o seu endereço, normalmente da rede local
■ Os pacotes são encaminhados individualmente pela rede da origem
até ao destino
• Pela rede de larga escala são reencaminhados entre routers e gateways
• O router final encaminha os pacotes para o computador destinatário
Redes
Interligação de redes
8
Internet
Rede de redes locais com protocolos próprios
■ Todos os computadores têm um endereço IP (Internet Protocol)
■ Se dentro da LAN o router envia o pacote directamente
■ Se estiver noutra LAN, terá de passar por vários routers
• Tipicamente, a LAN tem apenas um endereço para o exterior
• O router tem de traduzir os endereços (NAT, Network Address Translation)
Internet
Protocolos da Internet
■ Nível físico
• Sinais entre os nós da rede
• Modulação e conversão: fibra óptica, telefone, cabo
• Transmissão ao nível do bit (0 ou 1)
10
Internet
Protocolos da Internet
■ Nível físico
■ Nível de ligação
• Transmissão de conjuntos de bits entre nós da rede
• Correcção de erros, gestão de filas de espera, ...
Internet
Protocolos da Internet
■ Nível físico
■ Nível de ligação
■ Nível IP (Internet Protocol)
• Gere os pacotes de bytes, endereçamento e reencaminhamento
• A informação é dividida em pacotes (sequências de bytes), encaminhados individualmente ao destino.
• Cada máquina tem um endereço e cada pacote tem o endereço do destinatário
• IPv4 (1983): 4 bytes (32 bits), normalmente repetido em redes locais porque só permite 400 milhões de endereços únicos
• e.g. 127.0.0.1 é o próprio computador, 192.168.1.1 costuma ser o router
12
Internet
Protocolos da Internet
■ Nível físico
■ Nível de ligação
■ Nível IP (Internet Protocol)
■ Nível de transporte (TCP).
• Transmission Control Protocol
Internet
Protocolos da Internet
■ Nível físico
■ Nível de ligação
■ Nível IP (Internet Protocol)
■ Nível de transporte (TCP).
■ Nível da aplicação
• Protocolos destinados a gerir a comunicação entre aplicações ou com o utilizador.
14
Internet
Internet
Protocolos da Internet
■ Normalmente não usamos os endereços IP
■ Em vez disso, usamos endereços simbólicos associados:
• e.g. www.google.com
■ O DNS (Domain Name System) é um sistema hierárquico de
servidores que mapeia os endereços simbólicos em endereços IP • Nomes genéricos de domínio: com biz edu info gov mil
• Nomes de domínio de países: pt au us de fr
16
Internet
Protocolos da Internet: DNS
Internet
Protocolos da Internet: DNS
■ Sistema hierárquico de servidores que mapeia os endereços
simbólicos em endereços IP
18
Internet
Protocolos da Internet: DNS
■ Em Março 2015 um memorando de entendimento entre ISP, IGAC
e SGC passou a permitir "bloquear" sites que os envolvidos considerem piratas.
■ Mas apenas configuram os servidores DNS para não resolver os
nomes desses sites
■ Assim, o “bloqueio” pode ser facilmente contornado usando outro
servidor DNS
• E.g. Google: 8.8.8.8, Open DNS: 208.67.222.222
■ A natureza distribuida da Internet e o uso de multiplos níveis de
protocolos torna-a muito robusta e versátil
Internet
Isto permitiu o enorme crescimento da Internet
■ Cerca de 50% das pessoas no mundo têm ligação à Internet
20
Internet
Internet
22
WWW
A WWW é uma rede montada sobre a Internet
■ 1989: Tim Berners-Lee (CERN) escreve proposta para sistema
distribuído de hiper-texto
• Ligar uma “web of notes with links” para ajudar os físicos do CERN a partilhar informação em grandes projectos.
■ 1990: Cria um browser com interface gráfica.
Componentes da World Wide Web:
■ Web, "teia" de documentos interligados e sofware para os gerir.
■ Potocolos de aplicação que gerem a partilha da informação.
■ Página Web: documento, normalmente ligado a outros
documentos.
WWW
A WWW é uma rede montada sobre a Internet
■ Site web: Conjunto de páginas Web relacionadas.
• Normalmente guardadas na mesma máquina, mas também podem estar distribuídas na "cloud"
■ Servidor Web - servidor
• Programa que responde a
pedidos de acesso às páginas Web.
■ Browser Web - cliente
• Ferramenta que pede páginas Web e as mostra.
24
WWW
A WWW é uma rede montada sobre a Internet
■ Três elementos centrais da World Wide Web:
• Uniform Resource Locator (URL)
• HTML: linguagem das páginas Web
• HTTP / HTTPS: Hypertext Transfer Protocol (Secure), sobre TCP/IP
■ URL: especifica a localização de um recurso.
WWW
Hypertext Markup Language (HTML)
■ Linguagem usada para criar páginas Web.
26
WWW
Hypertext Markup Language (HTML)
■ Tags (marcas): Colocadas entre os símbolos < e >
■ A marca final distingue-se da inicial pela </..>
■ Elementos são definidos por uma marca inicial e final
• e.g. <TITLE>Título</TITLE>
<h3> Hypertext Markup Language (HTML)</h3>
<ul><li>Tags (marcas): Colocadas entre os símbolos < e ></li> <li>A marca final distingue-se da inicial pela </..></li>
<li>Elementos são definidos por uma marca inicial e final</li> <ul><li>e.g. <code><TITLE>Título</TITLE></code></li>
WWW
28
WWW
Hypertext Transfer Protocol, status codes
■ 200 OK
■ 403 Forbidden
■ 404 Not Found
■ 451 Unavailable For Legal Reasons
• Referência a Fahrenheit 451, Ray Bradbury
■ 500 Internal Server Error
■ 503 Service Unavailable
■ Ver mais em:
Internet
30
Dados remotos
■ Exemplo: Quantos prémios Nobel da Química por país?
Dados remotos
■ Exemplo: Quantos prémios Nobel da Química por país?
...
<table class="wikitable sortable"> <tr> <th>Year</th> <th colspan="2">Laureate</th> <th>Country</th> <th>Rationale</th> </tr> <tr> <td>1901</td>
<td><a href="/wiki/File:Vant_Hoff.jpg" class="image">...
<td><a href="/wiki/Jacobus_Henricus_van_%27t_Hoff" ...
<td><span class="flagicon"><img alt="" src="...""> </span>
<a href="/wiki/Netherlands" title="Netherlands">Netherlands</a></td> <td>[for his] discovery of the laws of <a href="/wiki/Chemical_dynamics"...
</tr> <tr>
<td>1902</td>
...
32
Dados remotos
■ Exemplo: Quantos prémios Nobel da Química por país?
■ Células entre <td> e </td>
■ A que começa por <span class="flagicon" é a do país
■ O país está a seguir ao quarto > dentro da célula
...
<table class="wikitable sortable">
...
<td>1901</td>
<td><a href="/wiki/File:Vant_Hoff.jpg" class="image">...
<td><a href="/wiki/Jacobus_Henricus_van_%27t_Hoff" ...
<td><span class="flagicon"><img alt="" src="...""> </span>
<a href="/wiki/Netherlands" title="Netherlands">Netherlands</a></td> <td>[for his] discovery of the laws of <a href="/wiki/Chemical_dynamics"...
Dados remotos
Plano do programa:
■ Obter o código fonte da página HTML da Wikipedia
■ Extraír todos os países de todos os laureados
■ Obter daí lista, alfabética, dos países com premiados
■ Contar para cada país quantos laureados teve
34
Dados remotos
Em Python é fácil usar HTTP
■ O módulo requests tem uma interface HTTP/HTTPS
■ Podemos obter facilmente o código fonte da página:
In : import requests
In : r = requests.get('https://...Nobel_laureates_in_Chemistry') In : r.text
Out: '<!DOCTYPE html>\n<html class="client-nojs" lang="en" dir="ltr">\n<head>\n<meta charset="UTF-8"/>\n<title>
List of Nobel laureates in Chemistry - Wikipedia</title>\n <script>document.documentElement.className =
...''
■ Este objecto do tipo Response tem outros atributos úteis:
In : r.ok Out: True
Dados remotos
■ Extraír países da tabela
• Células entre <td> e </td>
• A que começa por <span class="flagicon" é a do país
• O país está a seguir ao quarto > dentro da célula
def all_countries(html):
"""Return list of all countries in Wikipedia Nobel html table"""
cells = html.split('<td>') countries = []
for cell in cells:
if cell.startswith('<span class="flagicon"'):
countries.append(cell.split('>')[4].split('<')[0]) return countries
<td><a href="/wiki/File:Vant_Hoff.jpg" class="image">...
<td><a href="/wiki/Jacobus_Henricus_van_%27t_Hoff" ...
<td><span class="flagicon"><img alt="" src="...""> </span>
36
Dados remotos
■ Testamos o código, confirmando que temos todos os países
def all_countries(html):
"""Return list of all countries in Wikipedia Nobel html table"""
table = html.split('<table class="wikitable sortable">')[1] table.split('</table>')[0]
cells = table.split('<td>') countries = []
for cell in cells:
if cell.startswith('<span class="flagicon"'):
countries.append(cell.split('>')[4].split('<')[0]) return countries
In : r = requests.get('https://...Nobel_laureates_in_Chemistry') In : countries = all_countries(r.text)
Out: ['Netherlands', 'Germany', 'Sweden', 'United Kingdom', 'Germany', 'France'
'Germany', 'United Kingdom', 'Germany', 'Germany', 'Poland', 'France', 'France', 'Switzerland', 'United States', 'Germany', 'Germany', 'Germany'
Dados remotos
■ Países diferentes, por ordem alfabética
• Basta usar o sort da lista, que ordena a lista
def unique_countries(countries):
"""Return unique countries in list, sorted alphabetically"""
unique = [] for c in countries: if c not in unique: unique.append(c) unique.sort() return unique In : names = unique_countries(countries)
Out: ['Argentina', 'Australia', 'Austria', 'Belgium', 'Canada', 'Croatia', 'Czechoslovakia', 'Denmark', 'Finland', 'France', 'Germany', 'Israel', 'Italy', 'Japan', 'Mexico', 'Netherlands', 'Norway', 'Poland',
38
Dados remotos
■ Contar quantas vezes ocorre cada país
• Começamos com uma lista a zeros, vamos somando no sítio certo
def count_per_category(values, categories):
"""Return number of occurrences of each category in values"""
Dados remotos
■ Laureados por país, juntar tudo
def laurates_per_country(url):
"""Returns string with laureates per country from wiki page"""
r = requests.get(url) if not r.ok:
return 'Error getting data'
countries = all_countries(r.text) names = unique_countries(countries)
counts = count_per_category(countries,names) table = ''
for ix in range(len(names)):
table = table + names[ix] +'\t'+str(counts[ix])+'\n'
return table
In : chemistry = laurates_per_country('https://...Nobel_laureates_in_Chemistry'
In : print(chemistry) Argentina 1 Australia 1 ...
40
Dados remotos
■ Como estas páginas têm o mesmo formato, funciona com outras:
Dados remotos
■ Como estas páginas têm o mesmo formato, funciona com outras:
42
Internet
Internet
Resumo
■ Internet: rede de redes de computadores
• Diferentes níveis de protocolos "empilhados" permitem abstraír dos detalhes
■ World Wide Web: rede de documentos
• Construída sobre a Internet (URL, HTTP, HTML)
■ Acesso a recursos na WWW, tipicamente em HTML
• Módulo requests
• Processar html (processar strigs)
Leitura adicional:
■ Recomendada: Capítulo 9 dos apontamentos