Web Scraping para artigos de notícias usando Python - a melhor maneira em 2024

Python, Mar-06-20245 minutos de leitura

As notícias são a melhor forma de saber o que está a acontecer em todo o mundo. Para os engenheiros de dados, os artigos noticiosos são uma das melhores formas de recolher quantidades surreais de dados. Mais dados significam mais conhecimentos, e só assim podemos inovar a nossa tecnologia e levar a nossa humanidade a patamares mais elevados do que nunca. Mas há

As notícias são a melhor forma de saber o que está a acontecer em todo o mundo. Para os engenheiros de dados, os artigos noticiosos são uma das melhores formas de recolher quantidades surreais de dados. Mais dados significam mais conhecimentos, e só assim podemos inovar a nossa tecnologia e levar a nossa humanidade a patamares nunca antes atingidos. Mas há muitas notícias, e é humanamente impossível obter todos os dados manualmente. Qual é a melhor forma de obter os dados automaticamente? A resposta é a recolha de artigos noticiosos na Web utilizando python.

Neste artigo, vamos criar um web scraper para extrair os artigos de notícias mais recentes de diferentes jornais e armazená-los como texto. Vamos percorrer os dois passos seguintes para analisar em profundidade como é que todo o processo é feito.

Introdução superficial às páginas Web e ao HTML.Web scraping utilizando Python e a famosa biblioteca BeautifulSoup.

Pode aceder a qualquer secção para obter mais informações sobre como efetuar a recolha de dados da Web para artigos noticiosos utilizando python

Índice

Introdução superficial a páginas Web e HTML

Se quisermos retirar informações importantes de qualquer sítio Web ou página Web, é importante saber como funciona esse sítio Web. Quando acedemos a um URL específico utilizando qualquer navegador Web (Chrome, Firefox, Mozilla, etc.), essa página Web é uma combinação de três tecnologias,

HTML (HyperText Markup Language): O HTML define o conteúdo da página Web. É a linguagem de marcação padrão para adicionar conteúdo ao sítio Web. Por exemplo, se quiser adicionar texto, imagens ou qualquer outro material ao seu sítio Web, o HTML ajuda-o a fazê-lo.

CSS (Cascading Style Sheets): É utilizado para estilizar páginas Web. As CSS tratam de todos os designs visuais que vê num determinado sítio Web.

JavaScript: O JavaScript é o cérebro de uma página Web. O JavaScript trata de todo o tratamento lógico e da funcionalidade da página Web. Por isso, permite tornar o conteúdo e o estilo interactivos.

Estas três linguagens de programação permitem-nos criar e manipular os aspectos de uma página Web.

Suponho que sabes o básico de uma página Web e de HTML para este artigo. Alguns conceitos de HTML, como divs, etiquetas, cabeçalhos, etc., podem ser muito úteis para criar este raspador da Web. Não precisas de saber tudo, mas apenas o básico sobre o design de uma página Web e a forma como a informação está contida nela, e estás pronto para começar.

Web Scraping de artigos de notícias usando BeautifulSoup em Python

Python tem vários pacotes que nos permitem extrair informações de uma página web. Vamos continuar com o BeautifulSoup porque é uma das bibliotecas Python mais famosas e fáceis de utilizar para a recolha de informação da Web.

O BeautifulSoup é ideal para analisar o conteúdo HTML de um URL e aceder-lhe com etiquetas e rótulos. Por conseguinte, será conveniente extrair determinados pedaços de texto do sítio Web.

Com apenas 3-5 linhas de código, podemos fazer a magia e extrair qualquer tipo de texto do nosso sítio Web de eleição a partir da Internet, o que faz com que seja um pacote fácil de utilizar mas poderoso.

Começamos pelo básico. Para instalar o pacote de bibliotecas, digite o seguinte comando na sua distribuição Python,

pip install beautifulsoup4

Também usaremos o 'módulo requests', pois ele fornece ao BeautifulSoup o código HTML de qualquer página. Para instalá-lo, digite o seguinte comando na sua distribuição Python,

! pip install requests

Este módulo de pedidos permitir-nos-á obter o código HTML da página Web e navegar nela utilizando o pacote BeautfulSoup. Os dois comandos que facilitarão muito o nosso trabalho são

find_all(elemento tag, atributo): Esta função recebe tag e atributos como parâmetros e permite-nos localizar qualquer elemento HTML de uma página web. Irá identificar todos os elementos do mesmo tipo. Podemos utilizar find() para obter apenas o primeiro elemento.

get_text(): Uma vez localizado um determinado elemento, este comando permite-nos extrair o texto do seu interior.

Para navegar no código HTML da nossa página Web e localizar os elementos que pretendemos extrair, podemos utilizar a opção "inspecionar elemento" clicando com o botão direito do rato na página ou premindo simplesmente Ctrl+F. Isto permitir-lhe-á ver o código fonte da página Web.

Assim que localizarmos os elementos de interesse, obteremos o código HTML com o módulo requests e, para extrair esses elementos, utilizaremos o BeautifulSoup.

Para este artigo, vamos trabalhar com o jornal inglês EL Paris. Vamos extrair os títulos das notícias da primeira página e depois o texto.

Se inspeccionarmos o código HTML dos artigos de notícias, veremos que o artigo na página inicial tem uma estrutura como esta,

The title has <h2> element with itemprop=”headline” and class=”articulo-titulo” attributes. It has an href attribute containing the text. So we will now extract the text using the following commands:

importar pedidos
from bs4 import BeautifulSoup

Assim que obtivermos o conteúdo HTML utilizando o módulo requests, podemos guardá-lo na variável coverpage:

# Pedido
r1 = requests.get(url)
r1.status_code
 
# Vamos guardar na coverpage o conteúdo da página de rosto
coverpage = r1.content

De seguida, vamos definir a variável soup,

# Criação da sopa
soup1 = BeautifulSoup(coverpage, 'html5lib')

Na linha de código seguinte, vamos localizar os elementos que estamos a procurar,

# Identificação de notícias
coverpage_news = soup1.find_all('h2', class_='articulo-titulo')

Utilizando final_all, estamos a obter todas as ocorrências. Por conseguinte, deve devolver uma lista em que cada item é um artigo de notícias,

Para podermos extrair o texto, utilizaremos o seguinte comando:

coverpage_news[4].get_text()

Se quisermos aceder ao valor de um atributo (no nosso caso, a ligação), podemos utilizar o seguinte comando,

coverpage_news[4]['href']

Isto permitir-nos-á obter a ligação em texto simples.

Se tiver compreendido todos os conceitos até este ponto, pode fazer web scraping de qualquer conteúdo à sua escolha.

A próxima etapa envolve acessar cada conteúdo do artigo de notícias com o atributo href, obter o código-fonte para encontrar os parágrafos no código HTML e, finalmente, obtê-los com o BeautifulSoup. É o mesmo processo que descrevemos acima, mas precisamos definir as tags e os atributos que identificam o conteúdo do artigo de notícias.

O código para a funcionalidade completa é apresentado abaixo. Não vou explicar cada linha separadamente, uma vez que o código está comentado; é possível compreendê-lo claramente lendo os comentários.

número_de_artigos = 5
# Listas vazias para conteúdos, ligações e títulos
conteúdo_notícias = []
list_links = []
list_titles = []
 
for n in np.arange(0, number_of_articles):
    
   # apenas artigos de notícias (também há álbuns e outras coisas)
   if "inenglish" not in coverpage_news[n].find('a')['href']:  
       continuar
    
   # Obter o link do artigo
   link = coverpage_news[n].find('a')['href']
    list_links.append(link)
    
   # Obter o título
    title = coverpage_news[n].find('a').get_text()
    lista_títulos.append(título)
    
   # Ler o conteúdo (está dividido em parágrafos)
    artigo = pedidos.get(link)
    conteúdo_do_artigo = artigo.conteúdo
    soup_article = BeautifulSoup(article_content, 'html5lib')
    body = soup_article.find_all('div', class_='articulo-cuerpo')
    x = body[0].find_all('p')
    
   # Unificar os parágrafos
    list_paragraphs = []
   for p in np.arange(0, len(x)):
        parágrafo = x[p].get_text()
        list_paragraphs.append(paragraph)
        artigo_final = " ".join(lista_parágrafos)
        
    notícias_conteúdos.append(artigo_final)

Vamos colocar os artigos extraídos no seguinte:

  • Um conjunto de dados que irá introduzir os modelos (df_features).
  • Um conjunto de dados com o título e a ligação (df_show_info).
# df_features
df_features = pd.DataFrame(
     {'Article Content': news_contents 
    })
 
# df_show_info
df_show_info = pd.DataFrame(
    {'Article Title': list_titles,
     'Article Link': list_links})
df_features
df_show_info

Para definir uma melhor experiência do utilizador, vamos também medir o tempo que um script demora a obter as notícias. Vamos definir uma função para isso e depois chamá-la. Mais uma vez, não vou explicar todas as linhas de código, uma vez que o código está comentado. Para compreender melhor, pode ler os comentários.

def get_news_elpais():
    
    # url definition
    url = "https://elpais.com/elpais/inenglish.html"
    
    # Request
    r1 = requests.get(url)
    r1.status_code
 
    # We'll save in coverpage the cover page content
    coverpage = r1.content
 
    # Soup creation
    soup1 = BeautifulSoup(coverpage, 'html5lib')
 
    # News identification
    coverpage_news = soup1.find_all('h2', class_='articulo-titulo')
    len(coverpage_news)
    
    number_of_articles = 5
 
    # Empty lists for content, links and titles
    news_contents = []
    list_links = []
    list_titles = []
 
    for n in np.arange(0, number_of_articles):
 
        # only news articles (there are also albums and other things)
        if "inenglish" not in coverpage_news[n].find('a')['href']:  
            continue
 
        # Getting the link of the article
        link = coverpage_news[n].find('a')['href']
        list_links.append(link)
 
        # Getting the title
        title = coverpage_news[n].find('a').get_text()
        list_titles.append(title)
 
        # Reading the content (it is divided in paragraphs)
        article = requests.get(link)
        article_content = article.content
        soup_article = BeautifulSoup(article_content, 'html5lib')
        body = soup_article.find_all('div', class_='articulo-cuerpo')
        x = body[0].find_all('p')
 
        # Unifying the paragraphs
        list_paragraphs = []
        for p in np.arange(0, len(x)):
            paragraph = x[p].get_text()
            list_paragraphs.append(paragraph)
            final_article = " ".join(list_paragraphs)
 
        news_contents.append(final_article)
 
    # df_features
    df_features = pd.DataFrame(
         {'Content': news_contents 
        })
 
    # df_show_info
    df_show_info = pd.DataFrame(
        {'Article Title': list_titles,
         'Article Link': list_links,
         'Newspaper': 'El Pais English'})
    
    return (df_features, df_show_info)

Qual é o melhor proxy para Web Scraping de artigos de notícias usando Python?

ProxyScrape é um dos mais populares e fiáveis fornecedores de proxy online. Os três serviços de proxy incluem servidores proxy dedicados a centros de dados, servidores proxy residenciais e servidores proxy premium. Então, qual é a melhor solução possível para o melhor proxy HTTP para a recolha de artigos noticiosos na Web utilizando python? Antes de responder a essas perguntas, é melhor ver as características de cada servidor proxy.

Um proxy de centro de dados dedicado é mais adequado para tarefas online de alta velocidade, como a transmissão de grandes quantidades de dados (em termos de tamanho) de vários servidores para fins de análise. Esta é uma das principais razões pelas quais as organizações escolhem proxies dedicados para transmitir grandes quantidades de dados num curto espaço de tempo.

Um proxy de centro de dados dedicado tem várias características, tais como largura de banda ilimitada e ligações simultâneas, proxies HTTP dedicados para facilitar a comunicação e autenticação IP para maior segurança. Com 99,9% de tempo de atividade, pode ter a certeza de que o centro de dados dedicado funcionará sempre durante qualquer sessão. Por último, mas não menos importante, ProxyScrape fornece um excelente serviço de apoio ao cliente e ajudá-lo-á a resolver o seu problema no prazo de 24-48 horas úteis. 

O próximo é um proxy residencial. O proxy residencial é um proxy de referência para todos os consumidores em geral. A principal razão é que o endereço IP de um proxy residencial se assemelha ao endereço IP fornecido pelo ISP. Isto significa que obter permissão do servidor de destino para aceder aos seus dados será mais fácil do que o habitual. 

A outra caraterística do proxy residencial do ProxyScrapeé uma funcionalidade rotativa. Um proxy rotativo ajuda-o a evitar uma proibição permanente da sua conta porque o seu proxy residencial altera dinamicamente o seu endereço IP, tornando difícil para o servidor de destino verificar se está a utilizar um proxy ou não. 

Para além disso, as outras características de um proxy residencial são: largura de banda ilimitada, juntamente com ligação simultânea, proxies HTTP/s dedicados, proxies em qualquer sessão de tempo devido aos mais de 7 milhões de proxies no pool de proxies, autenticação de nome de utilizador e palavra-passe para maior segurança e, por último, mas não menos importante, a capacidade de mudar o servidor do país. Pode selecionar o servidor pretendido anexando o código do país à autenticação do nome de utilizador. 

O último é o proxy premium. Os proxies premium são iguais aos proxies dedicados de centros de dados. A funcionalidade permanece a mesma. A principal diferença é a acessibilidade. Nos proxies premium, a lista de proxies (a lista que contém proxies) é disponibilizada a todos os utilizadores da rede ProxyScrape. É por isso que os proxies premium custam menos do que os proxies dedicados de centros de dados.

Então, qual é a melhor solução possível para o melhor proxy HTTP para a recolha de dados da Web para artigos noticiosos utilizando python? A resposta seria "proxy residencial". A razão é simples. Como dito acima, o proxy residencial é um proxy rotativo, o que significa que seu endereço IP seria alterado dinamicamente durante um período de tempo, o que pode ser útil para enganar o servidor enviando muitas solicitações dentro de um pequeno período de tempo sem obter um bloco de IP. 

Em seguida, o melhor seria alterar o servidor proxy com base no país. Basta acrescentar o ISO_CODE do país no final da autenticação IP ou da autenticação de nome de utilizador e palavra-passe. 

Leituras sugeridas:

Raspar comentários do YouTube - 5 passos simplesAs 8 melhores ferramentas de raspagem da Web Python em 2023

Perguntas frequentes:

1. Qual é a melhor forma de recolher artigos de notícias usando python?
A biblioteca python chama-se "BeautifulSoup" e pode extrair automaticamente dados de qualquer artigo noticioso. O único requisito seria um conhecimento básico de HTML para localizar a etiqueta HTML do código fonte da página que contém os dados que precisam de ser extraídos.
2. É correto extrair artigos de notícias do sítio Web?
A resposta é que depende dos termos e condições do sítio Web. Mas a maioria dos artigos noticiosos pode ser extraída, uma vez que toda a informação é intencionalmente disponibilizada ao público. Todos os dados públicos podem ser extraídos, desde que o seu método de extração não prejudique os dados ou o proprietário do sítio Web.
3. Como é que eu recolho as notícias do Google usando Python?
Pode extrair o Google News ou quaisquer artigos noticiosos utilizando python com a ajuda da biblioteca python chamada "BeautifulSoup". Instale a biblioteca e um proxy residencial fiável para evitar o bloqueio de IP do servidor de destino.

Conclusão

Neste artigo, vimos os princípios básicos da raspagem da Web, compreendendo os princípios básicos do design e da estrutura do fluxo da página da Web. Também fizemos uma experiência prática, extraindo dados de artigos de notícias. A raspagem da Web pode fazer maravilhas se for feita corretamente. Por exemplo, pode ser criado um modelo totalmente optimizado com base nos dados extraídos que pode prever categorias e mostrar resumos ao utilizador. A coisa mais importante a fazer é descobrir os seus requisitos e compreender a estrutura da página. Python tem algumas bibliotecas muito poderosas e fáceis de usar para extrair os dados de sua escolha. Isso tornou o web scraping muito fácil e divertido.  

É importante notar que este código é útil para extrair dados desta página Web em particular. Se o quisermos fazer a partir de qualquer outra página, temos de otimizar o nosso código de acordo com a estrutura dessa página. Mas assim que soubermos como identificá-los, o processo é exatamente o mesmo.

Este artigo pretende explicar em profundidade a abordagem prática da recolha de dados da Web para artigos noticiosos utilizando python. Um aspeto a ter em conta é que o proxy é uma necessidade absoluta para o web scraping. Ajuda a evitar quaisquer bloqueios de IP do servidor de destino. ProxyScrape O site da Web, o "Python", fornece um proxy residencial excelente e fiável para o seu web scraping de artigos noticiosos utilizando projectos python.