9 - internet - iceb.ssdi.di.fct.unl.pticeb.ssdi.di.fct.unl.pt/1718/files/ice-b-09.pdf ·...

Post on 29-Dec-2018

239 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ICE-B

9 - Internet

Ludwig Krippahl

1

Internet

Resumo■ Introdução às redes de computadores e à Internet■ Obtenção de dados da Internet usando Python■ Exemplo: contar prémios Nobel por país

2

Internet

Redes de computadores

3

Redes

Uma rede permite partilhar recuros e informação■ Infraestrutura de troca de

mensagens■ Liga computadores para

trocar informação epartilhar recursos

■ E.g. Pesquisa no Google:• Enviamos a pergunta• Usamos os servidores• Obtemos o resultado

Image: Mauro Bieg, public domain

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 ⇐ ⇒

5

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

• Gateway é um router que interliga redes diferentes (converte protocolos)

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 origematé 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

■ O destinatário depois reconstroi a mensagem a partir dos pacotes

7

Redes

Interligação de redes■ 2 LAN ligadas por 3 routers

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)

■ Os routers propagam o pacote até ao router da LAN do destinatário

9

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)• Exemplo: Wi-Fi, 2.4 GHz e 5.8 GHz

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, ...• Exemplo: IEEE 802.11, para wireless LAN

11

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), encaminhadosindividualmente 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

• IPv6: 16 bytes (128 bits), suficiente para atribuir endereços únicos3 × 1038

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

• Gere o transporte de dados, encarregando-se da gestão de pacotes e detecção erecuperação de erros.

13

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.

• E.g HTTP, DNS, ...

14

Internet

Protocolos da Internet

15

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 deservidores 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

Wikimedia, Public Domain

17

Internet

Protocolos da Internet: DNS■ Sistema hierárquico de servidores que mapeia os endereços

simbólicos em endereços IP

Wikimedia, Public Domain

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 envolvidosconsiderem piratas.

■ Mas apenas configuram os servidores DNS para não resolver osnomes desses sites

■ Assim, o “bloqueio” pode ser facilmente contornado usando outroservidor 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 deprotocolos torna-a muito robusta e versátil

• E.g. Por VPN podemos criar uma rede privada sobre a rede pública

19

Internet

Isto permitiu o enorme crescimento da Internet

■ Cerca de 50% das pessoas no mundo têm ligação à Internet(Internet World Stats)

20

Internet

CodyHofstetter CC-SA

21

Internet

World Wide Web

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.■ Link: Ligação entre duas páginas Web.

23

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áginasWeb.

■ Browser Web - cliente• Ferramenta que pede páginas

Web e as mostra. David Vignoni, LGPL

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.• Protocolo (pode ser omitido), nome da máquina, recurso (e.g. ficheiro)

25

WWW

Hypertext Markup Language (HTML)■ Linguagem usada para criar páginas Web.■ Tags: Especificam como o browser deve representar a página.

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>

</ul></ul>

27

WWW

Hypertext Transfer Protocol (HTTP)

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:

https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

29

Internet

Para que serve isto?

30

Dados remotos

■ Exemplo: Quantos prémios Nobel da Química por país?

https://en.wikipedia.org/wiki/List_of_Nobel_laureates_in_Chemistry

31

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> ... </table>

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"... ... </table>

33

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■ Imprimir tudo

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 In : r.status_code Out: 200

35

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> <a href="/wiki/Netherlands" title="Netherlands">Netherlands</a></td> <td>[for his] discovery of the laws of <a href="/wiki/Chemical_dynamics"...

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' 'United Kingdom', 'United Kingdom', 'Austria', 'Germany', 'Sweden', 'Germany', 'Germany', 'United Kingdom', 'Sweden', 'Germany', 'Germany', 'Germany', 'United States', 'United States', 'France', 'France', ...]

37

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', 'Soviet Union', 'Sweden', 'Switzerland', 'United Kingdom', 'United States', 'West Germany', 'Yugoslavia']

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""" counts = [] for _ in categories: counts.append(0) for v in values: ix = categories.index(v) counts[ix] = counts[ix]+1 return counts

In : counts = count_per_category(countries,names) Out: [1, 1, 1, 1, 4, 1, 1, 1, 1, 8, 21, 4, 1, 7, 1, 4, 1, 1, 1, 5, 5, 26, 69, 10, 1]

39

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 ... United States 69 West Germany 10 Yugoslavia 1

40

Dados remotos

■ Como estas páginas têm o mesmo formato, funciona com outras:

In : physics = laurates_per_country('https://...Nobel_laureates_in_Physics') In : print(physics) Australia 2 Austria 3 Austria-Hungary 1 Belgium 1 Canada 4 ... Netherlands 9 Pakistan 1 Poland 1 Republic of China 3 Russia 5 Soviet Union 7 Sweden 4 Switzerland 4 United Kingdom 22 United States 78 West Germany 9

41

Dados remotos

■ Como estas páginas têm o mesmo formato, funciona com outras:

In : medicine = laurates_per_country('https://...Nobel_laureates_in_Medicine') In : print(medicine) Argentina 2 Australia 6 Austria 4 Austria-Hungary 1 ... Norway 2 Portugal 1 Romania 1 Russia 2 South Africa 3 Spain 1 Sweden 7 Switzerland 7 United Kingdom 26 United States 90 Venezuela 1 West Germany 4

42

Internet

Resumo

43

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■ Opcional: documentação do módulo requests• http://docs.python-requests.org/en/master/

top related