Web Scrapping Python

Salve pessoal,
Estou a fazer um programa em Python que mostra o título e o 1º parágrafo das notícias da página Observador da secção desporto.
Só estou a conseguir mostrar as informações de duas notícias e eu queria de todas, ajuda pfvr.
Agradeço desde já e deixo aqui o meu código.

from urllib.request import urlopen 											#Conectar à página Web
from urllib.error import HTTPError 											#Tratar exceções caso houver um erro no servidor interno
from urllib.error import URLError  											#Tratar exceções caso o servidor estiver inativo ou o domínio for incorreto
from bs4 import BeautifulSoup
try:
    html = urlopen("https://observador.pt/seccao/desporto/")
except HTTPError as e:
    print(e)
except URLError:
    print("Servidor inativo ou domínio incorreto")
else:
    res = BeautifulSoup(html.read(),"html5lib") 							#Ler o HTML -> html.read
    if res.title is None:													#Caso a tag introduzida não for encontrada
        print("Tag não encontrado")
    else:
        print(res.title)
    tags = res.findAll(["h1", "div"] , {"class": ["title", "lead"]})        #Filtrar elementos com base em seus atributos
    for tag in tags:
        print(tag.getText())

Opa amigo você está usando scrapy?

Não

Geralmente eu uso requests ao inves de urlopen

De qualquer forma fiz um teste aqui com o requests mas o resultado deve ser o mesmo pois o que importa é o BeautifulSoup

Ao invés de:

res.title

Tente usar:

res.find_all('h1')

Ele encontra todos os h1 do site, e pelo que notei as tags <h1> carregam os títulos das notícias.

:slight_smile:

Pra confirmar da um print e compara o resultado com os títulos da página:

for i in res.find_all('h1'):
... print i.text

Espero ter ajudado :wink: mesmo tendo demorado!