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 maneira de saber o que está acontecendo em todo o mundo. Para os engenheiros de dados, os artigos de notícias são uma das melhores maneiras de coletar quantidades surreais de dados. Mais dados significam mais percepções, e essa é a única forma de inovar nossa tecnologia e levar nossa humanidade a patamares mais altos do que nunca. Mas há

As notícias são a melhor maneira de saber o que está acontecendo em todo o mundo. Para os engenheiros de dados, os artigos de notícias são uma das melhores maneiras de coletar quantidades surreais de dados. Mais dados significam mais percepções, e essa é a única forma de inovar nossa tecnologia e levar nossa humanidade a patamares mais altos do que nunca. Mas há muitas notícias, e é humanamente impossível obter todos os dados manualmente. Qual é a melhor maneira de obter os dados automaticamente? A resposta é a Web scraping para artigos de notícias usando python.

Neste artigo, criaremos um raspador da Web para scrape os artigos de notícias mais recentes de diferentes jornais e os armazenaremos como texto. Passaremos pelas duas etapas a seguir para ter uma análise detalhada de como todo o processo é feito.

Introdução de nível superficial a páginas da Web e HTML.Web scraping usando Python e a famosa biblioteca BeautifulSoup.

Fique à vontade para acessar qualquer seção para saber mais sobre como executar o site scraping para artigos de notícias usando python

Índice

Introdução de nível superficial a páginas da Web e HTML

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

HTML (HyperText Markup Language): O HTML define o conteúdo da página da Web. É a linguagem de marcação padrão para adicionar conteúdo ao site. Por exemplo, se você quiser adicionar texto, imagens ou qualquer outro material ao seu site, o HTML o ajudará a fazer isso.

CSS (Cascading Style Sheets): É usado para estilizar páginas da Web. O CSS lida com todos os designs visuais que você vê em um site específico.

JavaScript: O JavaScript é o cérebro de uma página da Web. O JavaScript lida com todo o manuseio lógico e com a funcionalidade da página da Web. Portanto, ele permite tornar o conteúdo e o estilo interativos.

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

Suponho que você conheça os conceitos básicos de uma página da Web e de HTML para este artigo. Alguns conceitos de HTML, como divs, tags, cabeçalhos etc., podem ser muito úteis na criação desse raspador da Web. Você não precisa saber tudo, mas apenas os conceitos básicos do design da página da Web e como as informações estão contidas nela, e estamos prontos para começar.

Web Scraping artigos de notícias usando BeautifulSoup em Python

O Python tem vários pacotes que nos permitem scrape informações de uma página da Web. Continuaremos com o BeautifulSoup porque ele é uma das bibliotecas Python mais famosas e fáceis de usar para a Web scraping.

O BeautifulSoup é melhor para analisar o conteúdo HTML de um URL e acessá-lo com tags e rótulos. Portanto, será conveniente extrair determinados trechos de texto do site.

Com apenas 3 a 5 linhas de código, podemos fazer a mágica e extrair qualquer tipo de texto do site de nossa escolha da Internet, o que o torna um pacote fácil de usar e poderoso.

Começaremos pelo básico. Para instalar o pacote da biblioteca, digite o seguinte comando em sua distribuição Python,

pip install beautifulsoup4

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

pip install requests

Esse módulo de solicitações nos permitirá obter o código HTML da página da Web e navegar por ela usando o pacote BeautfulSoup. Os dois comandos que tornarão nosso trabalho muito mais fácil são

find_all(element tag, attribute): Essa função usa tag e atributos como parâmetros e nos permite localizar qualquer elemento HTML de uma página da Web. Ela identificará todos os elementos do mesmo tipo. Em vez disso, podemos usar find() para obter apenas o primeiro.

get_text(): Depois de localizarmos um determinado elemento, esse comando nos permite extrair o texto interno.

Para navegar pelo código HTML da nossa página da Web e localizar os elementos que desejamos scrape, podemos usar a opção "inspecionar elemento" clicando com o botão direito do mouse na página ou simplesmente pressionando Ctrl+F. Isso permitirá que você veja o código-fonte da página da Web.

Depois de localizarmos os elementos de interesse, obteremos o código HTML com o módulo de solicitações e, para extrair esses elementos, usaremos o BeautifulSoup.

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

Se inspecionarmos 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 solicitações
from bs4 import BeautifulSoup

Quando obtivermos o conteúdo HTML usando o módulo de solicitações, poderemos salvá-lo na variável coverpage:

# Solicitação
r1 = requests.get(url)
r1.status_code
 
# Salvaremos na coverpage o conteúdo da página de rosto
coverpage = r1.content

Em seguida, definiremos a variável soup,

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

Na linha de código a seguir, localizaremos os elementos que estamos procurando,

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

Usando final_all, estamos obtendo todas as ocorrências. Portanto, ele deve retornar uma lista na qual cada item é um artigo de notícias,

Para poder extrair o texto, usaremos o seguinte comando:

coverpage_news[4].get_text()

Se quisermos acessar o valor de um atributo (no nosso caso, o link), podemos usar o seguinte comando,

coverpage_news[4]['href']

Isso nos permitirá obter o link em texto simples.

Se você tiver compreendido todos os conceitos até este ponto, poderá acessar o site scrape com qualquer conteúdo de 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 localizar 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 é fornecido abaixo. Não explicarei cada linha separadamente, pois o código é comentado; é possível entendê-lo claramente lendo os comentários.

number_of_articles = 5
# Listas vazias para conteúdo, links e títulos
news_contents = []
list_links = []
list_titles = []
 
for n in np.arange(0, number_of_articles):
    
   # somente artigos de notícias (há também álbuns e outras coisas)
   if "inenglish" not in coverpage_news[n].find('a')['href']:  
       continue
    
   # Obter o link do artigo
   link = coverpage_news[n].find('a')['href']
    list_links.append(link)
    
   # Obtenção do título
    title = coverpage_news[n].find('a').get_text()
    list_titles.append(title)
    
   # Leitura do conteúdo (dividido em parágrafos)
    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')
    
   # Unificação dos parágrafos
    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)

Vamos colocar os artigos extraídos no seguinte:

  • Um conjunto de dados que inserirá os modelos (df_features).
  • Um conjunto de dados com o título e o link (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 experiência melhor para o usuário, também mediremos o tempo que um script leva para obter as notícias. Definiremos uma função para isso e a chamaremos. Novamente, não explicarei cada linha de código, pois o código está comentado. Para ter uma compreensão clara, você pode ler esses 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 site Proxy para Web Scraping para artigos de notícias usando Python?

ProxyScrape é um dos mais populares e confiáveis provedores on-line de proxy . Os três serviços proxy incluem servidores dedicados de datacenter proxy , servidores residenciais proxy e servidores premium proxy . Então, qual é a melhor solução possível para o melhor HTTP proxy para a Web scraping para artigos de notícias usando python? Antes de responder a essa pergunta, é melhor ver os recursos de cada servidor proxy .

Um datacenter dedicado proxy é mais adequado para tarefas on-line 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. Esse é um dos principais motivos pelos quais as organizações escolhem o proxies dedicado para transmitir grandes quantidades de dados em um curto espaço de tempo.

Um datacenter dedicado proxy tem vários recursos, como largura de banda ilimitada e conexões simultâneas, HTTP proxies dedicado para facilitar a comunicação e autenticação de IP para maior segurança. Com 99,9% de tempo de atividade, você pode ter certeza de que o data center dedicado sempre funcionará durante qualquer sessão. Por último, mas não menos importante, o ProxyScrape oferece excelente atendimento ao cliente e o ajudará a resolver seu problema dentro de 24 a 48 horas úteis. 

O próximo é um proxy residencial. Residencial é o proxy preferido de todos os consumidores em geral. O principal motivo é que o endereço IP de um proxy residencial se assemelha ao endereço IP fornecido pelo ISP. Isso significa que obter permissão do servidor de destino para acessar seus dados será mais fácil do que o normal. 

O outro recurso do proxy residencial do ProxyScrapeé um recurso rotativo. Um proxy rotativo ajuda a evitar um banimento permanente da sua conta porque o proxy residencial muda dinamicamente o seu endereço IP, dificultando que o servidor de destino verifique se você está usando um proxy ou não. 

Além disso, os outros recursos de um proxy residencial são: largura de banda ilimitada, juntamente com conexão simultânea, HTTP/s dedicado proxies, proxies em qualquer sessão de tempo devido aos mais de 7 milhões de proxies no pool proxy , autenticação de nome de usuário e senha para maior segurança e, por último, mas não menos importante, a capacidade de alterar o servidor do país. Você pode selecionar o servidor desejado anexando o código do país à autenticação do nome de usuário. 

O último é o proxy premium. O Premium proxies é igual ao datacenter dedicado proxies. A funcionalidade permanece a mesma. A principal diferença é a acessibilidade. No proxies premium, a lista proxy (a lista que contém o proxies) é disponibilizada para todos os usuários da rede ProxyScrape. É por isso que o proxies premium custa menos que o datacenter dedicado proxies.

Então, qual é a melhor solução possível para o melhor HTTP proxy para a Web scraping para artigos de notícias usando python? A resposta seria " proxy residencial". O motivo é simples. Como dito acima, o proxy residencial é um proxy rotativo, o que significa que seu endereço IP será alterado dinamicamente durante um período de tempo, o que pode ser útil para enganar o servidor enviando muitas solicitações em um curto período de tempo sem receber um bloqueio 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 de IP ou da autenticação de nome de usuário e senha. 

Leituras sugeridas:

Scrape Comentários do YouTube - 5 passos simplesAs 8 melhores ferramentas Python para Web Scraping em 2023

Perguntas frequentes:

1. Qual é a melhor maneira de scrape artigos de notícias usando python?
A biblioteca python é chamada "BeautifulSoup" e pode automaticamente scrape dados de qualquer artigo de notícias. O único requisito seria um conhecimento básico de HTML para localizar a tag HTML no código-fonte da página que contém os dados que precisam ser extraídos.
2. É possível acessar scrape artigos de notícias do site?
A resposta é que isso depende dos termos e condições do site. Mas a maioria dos artigos de notícias pode ser extraída, pois todas as informações são intencionalmente disponibilizadas ao público. Todos os dados públicos podem ser extraídos, desde que seu método scraping não prejudique os dados ou o proprietário do site.
3. Como faço para acessar scrape Google News usando Python?
Você pode scrape o Google News ou qualquer artigo de notícias usando python com a ajuda da biblioteca python chamada "BeautifulSoup". Instale a biblioteca e um endereço residencial confiável proxy para evitar o bloqueio de IP do servidor de destino.

Concluindo

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

É importante observar que esse código é útil para extrair dados dessa página da Web específica. Se quisermos fazer isso de qualquer outra página, precisaremos otimizar nosso código de acordo com a estrutura dessa página. Mas, depois que soubermos como identificá-los, o processo será exatamente o mesmo.

Este artigo pretende explicar em detalhes a abordagem prática da Web scraping para artigos de notícias usando python. Um aspecto a ser lembrado é que o proxy é uma necessidade absoluta para a Web scraping. Ele ajuda a evitar qualquer bloqueio de IP do servidor de destino. ProxyScrape O proxy fornece um excelente e confiável residencial para sua web scraping para artigos de notícias usando projetos python.