Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Busca de palavras em uma página web

Escreva o método news() que aceita um URL de um site Web de notícias e uma lista de tópicos de notícias (ou seja, strings) e calcula o número de ocorrências de cada tópico nas notícias.

Exemplo de saída:

news('http://bbc.co.uk',['economy','climate','education'])
economy appears 3 times.
climate appears 3 times.
education appears 1 times.

O que eu fiz:

def news(url,tópicos):
    from urllib.request import urlopen
    response = urlopen(url)
    html = response.read()
    pagina = html.decode("UTF8")
    for tópico in tópicos:
        print(f"{tópico} appears {pagina.count(tópico)} times")

url = "http://g1.com.br"
url="http://bbc.co.uk"
tópicos = ["política", "economia", "emprego", "educação", "saúde", "meio ambiente", "tecnologia", "ciência"]
tópicos = ["economy","Travel ","news"]

news(url,tópicos)

Estou achando que tem algo errado na minha solução, uma vez que, ao entrar nas paginas e conferir as contagens, não bate! O que eu fiz de errado?

3 respostas

Edson,

Seu código funcionou perfeitamente comigo.

@Welton Vaz de Souza:

Mas quando conferimos "manualmente" usando buscar na página web, a contagem não bate...

solução!

Olá Edson,

Como o Welton disse o seu código está correto, mas tem alguns detalhes a serem considerados quanto a contagem:

  1. Não é obrigatório, mas é recomendado que você não utilize acentos em nomes de variáveis, como em tópicos

  2. Palavras minúsculas ou maiúsculas. Talvez seja melhor adicionar algo como: print(f"{topico} appears {pagina.lower().count(topico.lower())} times"), assim economy e Economy serão encontradas.

  3. Um detalhe que pode estar causando a diferença na contagem é que itens internos, como classes css e código html, poderão conter o tópico procurado e irão modificar o valor da contagem. Nesse exemplo china aparece no href do link e no conteúdo:

    <a class="block-link__overlay-link"
         href="/news/world-asia-china-51171035"
         rev="hero1|overlay"
         tabindex="-1"
         aria-hidden="true">
         China virus cases triple as infection spreads
    </a>
  4. Por último, dependendo do site alguma parte da página pode ser gerada/modificada por javascript, e assim o código atual não vai poder executar esse javascript para representar a página 100%, é necessário algo mais avançado como o selenium por exemplo para executar esse javascript.

O item 3 deve ser o mais importante para você considerar, coloca print(pagina.lower()) antes do for que você vai poder ver o texto onde é procurado os tópicos, copia isso e utiliza esse texto em algum editor para fazer a busca manual Ctrl + F que deve dar a mesma contagem que o seu método news().

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software