Web Scraping for News Articles using Python- Best Way In 2024 (en anglais)

Python, Janvier 04 à 20235 minutes de lecture

L'actualité est le meilleur moyen d'apprendre ce qui se passe dans le monde. Pour les ingénieurs en données, les articles d'actualité sont l'un des meilleurs moyens de collecter des quantités surréalistes de données. Plus de données signifie plus d'informations, et c'est la seule façon d'innover notre technologie et d'amener notre humanité à des niveaux plus élevés que jamais. Mais il y a

L'actualité est le meilleur moyen d'apprendre ce qui se passe dans le monde. Pour les ingénieurs en données, les articles d'actualité sont l'un des meilleurs moyens de collecter des quantités surréalistes de données. Plus de données signifie plus d'informations, et c'est la seule façon d'innover notre technologie et d'amener notre humanité à des niveaux plus élevés que jamais. Mais les nouvelles sont nombreuses et il est humainement impossible d'obtenir toutes les données manuellement. Quel est le meilleur moyen d'obtenir automatiquement ces données ? La réponse est le web scraping pour les articles d'actualité en utilisant python.

Dans cet article, nous allons créer un scraper web pour récupérer les derniers articles de presse de différents journaux et les stocker sous forme de texte. Nous passerons par les deux étapes suivantes pour analyser en profondeur l'ensemble du processus.

Introduction superficielle aux pages web et au HTML, au scraping web en utilisant Python et la fameuse bibliothèque BeautifulSoup.

N'hésitez pas à passer d'une section à l'autre pour en savoir plus sur la manière d'effectuer du web scraping d'articles de presse en utilisant Python.

Table des matières

Introduction superficielle aux pages Web et au langage HTML

Si nous voulons retirer des informations importantes d'un site web ou d'une page web, il est important de savoir comment ce site web fonctionne. Lorsque nous accédons à une URL spécifique à l'aide d'un navigateur web (Chrome, Firefox, Mozilla, etc.), cette page web est une combinaison de trois technologies,

HTML (HyperText Markup Language) : Le HTML définit le contenu de la page web. Il s'agit du langage de balisage standard permettant d'ajouter du contenu au site web. Par exemple, si vous souhaitez ajouter du texte, des images ou tout autre élément à votre site web, le HTML vous aide à le faire.

CSS (Cascading Style Sheets) : Est utilisé pour styliser les pages web. Les feuilles de style en cascade gèrent toutes les conceptions visuelles que vous voyez sur un site web spécifique.

JavaScript : JavaScript est le cerveau d'une page web. JavaScript gère toute la logique et la fonctionnalité de la page web. Il permet donc de rendre le contenu et le style interactifs.

Ces trois langages de programmation permettent de créer et de manipuler les aspects d'une page web.

Je suppose que vous connaissez les bases d'une page web et du langage HTML pour cet article. Certains concepts HTML comme les divs, les balises, les en-têtes, etc. peuvent être très utiles lors de la création de ce scraper web. Vous n'avez pas besoin de tout savoir, mais seulement les bases de la conception d'une page web et la façon dont l'information est contenue, et nous sommes prêts à partir.

Récupération d'articles de presse en utilisant BeautifulSoup en Python

Python dispose de plusieurs paquets qui nous permettent d'extraire des informations d'une page web. Nous continuerons avec BeautifulSoup car c'est l'une des bibliothèques Python les plus connues et les plus faciles à utiliser pour le web scraping.

BeautifulSoup est le meilleur outil pour analyser le contenu HTML d'une URL et y accéder avec des balises et des étiquettes. Il sera donc pratique d'extraire certains morceaux de texte du site web.

Avec seulement 3 à 5 lignes de code, nous pouvons faire la magie et extraire n'importe quel type de texte du site web de notre choix sur Internet, ce qui en fait un logiciel facile à utiliser mais puissant.

Nous commençons par les bases. Pour installer la bibliothèque, tapez la commande suivante dans votre distribution Python,

! pip install beautifulsoup4

Nous utiliserons également le module 'requests' qui fournit à BeautifulSoup le code HTML de n'importe quelle page. Pour l'installer, tapez la commande suivante dans votre distribution Python,

! pip install requests

Ce module de requêtes nous permettra de récupérer le code HTML de la page web et de la parcourir à l'aide du package BeautfulSoup. Les deux commandes qui nous faciliteront la tâche sont les suivantes

find_all(element tag, attribute) : Cette fonction prend pour paramètres une balise et des attributs et permet de localiser n'importe quel élément HTML d'une page web. Elle identifiera tous les éléments du même type. Nous pouvons utiliser find() à la place pour n'obtenir que le premier élément.

get_text() : Une fois que nous avons localisé un élément donné, cette commande nous permet d'extraire le texte qui s'y trouve.

Pour naviguer dans le code HTML de notre page web et localiser les éléments que nous voulons récupérer, nous pouvons utiliser l'option "inspecter l'élément" en cliquant avec le bouton droit de la souris sur la page ou en appuyant simplement sur Ctrl+F. Cela vous permettra de voir le code source de la page web.

Une fois que nous aurons localisé les éléments qui nous intéressent, nous obtiendrons le code HTML avec le module requests, et pour extraire ces éléments, nous utiliserons BeautifulSoup.

Pour cet article, nous allons réaliser avec le journal EL Paris English. Nous allons récupérer les titres des articles de la première page, puis le texte.

Si nous inspectons le code HTML des articles d'actualité, nous verrons que l'article de la première page a une structure similaire,

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:

import requests
from bs4 import BeautifulSoup

Une fois que nous avons obtenu le contenu HTML à l'aide du module requests, nous pouvons l'enregistrer dans la variable coverpage :

# Requête
r1 = requests.get(url)
r1.status_code
 
# Nous enregistrerons dans coverpage le contenu de la page de couverture
coverpage = r1.content

Ensuite, nous allons définir la variable soupe,

# Création de la soupe
soup1 = BeautifulSoup(coverpage, 'html5lib')

Dans la ligne de code suivante, nous allons localiser les éléments que nous recherchons,

# Identification des nouvelles
coverpage_news = soup1.find_all('h2', class_='articulo-titulo')

En utilisant final_all, nous obtenons toutes les occurrences. Il doit donc renvoyer une liste dans laquelle chaque élément est un article d'actualité,

Pour pouvoir extraire le texte, nous utiliserons la commande suivante :

coverpage_news[4].get_text()

Si nous voulons accéder à la valeur d'un attribut (dans notre cas, le lien), nous pouvons utiliser la commande suivante,

coverpage_news[4]['href']

Cela nous permettra d'obtenir le lien en texte clair.

Si vous avez assimilé tous les concepts jusqu'à ce stade, vous pouvez récupérer sur le web n'importe quel contenu de votre choix.

L'étape suivante consiste à accéder à chaque contenu de l'article avec l'attribut href, à obtenir le code source pour trouver les paragraphes dans le code HTML, et enfin à les récupérer avec BeautifulSoup. C'est le même processus que nous avons décrit plus haut, mais nous devons définir les balises et les attributs qui identifient le contenu de l'article.

Le code pour la fonctionnalité complète est donné ci-dessous. Je n'expliquerai pas chaque ligne séparément car le code est commenté ; on peut le comprendre clairement en lisant ces commentaires.

nombre_d'articles = 5
# Listes vides pour le contenu, les liens et les titres
news_contents = []
list_links = []
list_titles = []
 
for n in np.arange(0, number_of_articles) :
    
   # seulement les articles d'actualité (il y a aussi des albums et d'autres choses)
   if "inenglish" not in coverpage_news[n].find('a')['href'] : 
       continue
    
   # Obtenir le lien de l'article
   link = coverpage_news[n].find('a')['href']
    list_links.append(link)
    
   # Obtenir le titre
    title = coverpage_news[n].find('a').get_text()
    list_titles.append(title)
    
   # Lire le contenu (il est divisé en paragraphes)
    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')
    
   # Unification des paragraphes
    list_paragraphs = []
   for p in np.arange(0, len(x)) :
        paragraphe = x[p].get_text()
        list_paragraphs.append(paragraph)
        article_final = " ".join(list_paragraphs)
        
    news_contents.append(final_article)

Mettons les articles extraits dans le tableau suivant :

  • Un ensemble de données qui servira de base aux modèles (df_features).
  • Un jeu de données avec le titre et le lien (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

Pour améliorer l'expérience de l'utilisateur, nous mesurerons également le temps nécessaire à un script pour obtenir les nouvelles. Nous définirons une fonction à cet effet et l'appellerons ensuite. Encore une fois, je n'expliquerai pas chaque ligne de code car le code est commenté. Pour bien comprendre, vous pouvez lire ces commentaires.

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)

Quel est le meilleur proxy pour la recherche d'articles de presse sur le Web en utilisant Python ?

ProxyScrape est l'un des fournisseurs de proxy les plus populaires et les plus fiables en ligne. Les trois services proxy comprennent les serveurs proxy dédiés aux centres de données, les serveurs proxy résidentiels et les serveurs proxy premium. Alors, quelle est la meilleure solution possible pour le meilleur proxy HTTP pour le web scraping d'articles de presse en utilisant python ? Avant de répondre à cette question, il est préférable d'examiner les caractéristiques de chaque serveur proxy.

Un proxy de centre de données dédié est mieux adapté aux tâches en ligne à grande vitesse, telles que la transmission en continu de grandes quantités de données (en termes de taille) à partir de divers serveurs à des fins d'analyse. C'est l'une des principales raisons pour lesquelles les organisations choisissent proxys pour transmettre de grandes quantités de données en peu de temps.

Un proxy dédié à un centre de données possède plusieurs caractéristiques, telles qu'une bande passante illimitée et des connexions simultanées, un site HTTP dédié proxys pour faciliter la communication et une authentification IP pour plus de sécurité. Avec un temps de disponibilité de 99,9 %, vous pouvez être assuré que le centre de données dédié fonctionnera toujours, quelle que soit la session. Enfin, ProxyScrape offre un excellent service à la clientèle et vous aidera à résoudre votre problème dans les 24-48 heures ouvrables. 

La prochaine est une procuration résidentielle. Le proxy résidentiel est le proxy de référence pour tous les consommateurs. La raison principale est que l'adresse IP d'un proxy résidentiel ressemble à l'adresse IP fournie par le FAI. Cela signifie qu'il sera plus facile d'obtenir l'autorisation du serveur cible pour accéder à ses données. 

L'autre caractéristique du proxy résidentiel de ProxyScrapeest une fonction rotative. Un proxy rotatif vous permet d'éviter une interdiction permanente de votre compte car votre proxy résidentiel change dynamiquement votre adresse IP, ce qui rend difficile pour le serveur cible de vérifier si vous utilisez un proxy ou non. 

En outre, les autres caractéristiques d'un proxy résidentiel sont les suivantes : bande passante illimitée, connexion simultanée, HTTP/s dédié proxys, proxys à tout moment de la session en raison des 7 millions de proxys dans le pool de proxy, authentification par nom d'utilisateur et mot de passe pour plus de sécurité, et enfin, la possibilité de changer le serveur du pays. Vous pouvez sélectionner le serveur de votre choix en ajoutant le code du pays à l'authentification du nom d'utilisateur. 

Le dernier est le proxy premium. Les proxys Premium sont les mêmes que les proxys dédiés aux centres de données. La fonctionnalité reste la même. La principale différence est l'accessibilité. Dans le cas du proxy premium proxys, la liste des mandataires (la liste qui contient proxys) est mise à la disposition de tous les utilisateurs du réseau ProxyScrape. C'est pourquoi le premium proxys coûte moins cher que le centre de données dédié proxys.

Alors, quelle est la meilleure solution possible pour le meilleur proxy HTTP pour le web scraping d'articles de presse en utilisant python ? La réponse serait "proxy résidentiel". La raison en est simple. Comme nous l'avons dit plus haut, le proxy résidentiel est un proxy rotatif, ce qui signifie que votre adresse IP change dynamiquement sur une période de temps, ce qui peut être utile pour tromper le serveur en envoyant un grand nombre de requêtes dans un court laps de temps sans obtenir un blocage d'IP. 

Ensuite, la meilleure chose à faire est de changer le serveur proxy en fonction du pays. Il suffit d'ajouter l'ISO_CODE du pays à la fin de l'authentification IP ou de l'authentification par nom d'utilisateur et mot de passe. 

Lectures suggérées :

Scraper les commentaires sur YouTube - 5 étapes simplesLes 8 meilleurs outils Python de Web Scraping en 2023

FAQs :

1. Quelle est la meilleure façon de récupérer des articles de presse en utilisant Python ?
La bibliothèque python s'appelle "BeautifulSoup" et peut automatiquement extraire des données de n'importe quel article d'actualité. La seule exigence est une connaissance de base du langage HTML pour localiser la balise HTML du code source de la page qui contient les données à extraire.
2. Est-il possible de récupérer des articles d'actualité sur le site web ?
La réponse dépend des conditions générales du site web. Toutefois, la plupart des articles d'actualité peuvent être récupérés, car toutes les informations sont intentionnellement mises à la disposition du public. Toutes les données publiques peuvent être récupérées tant que votre méthode de récupération ne nuit pas aux données ou au propriétaire du site web.
3. Comment récupérer Google News en utilisant Python ?
Vous pouvez récupérer Google News ou n'importe quel article d'actualité en utilisant python avec l'aide de la bibliothèque python appelée "BeautifulSoup". Installez la bibliothèque et un proxy résidentiel fiable pour éviter le blocage de l'IP du serveur cible.

Conclusion

Dans cet article, nous avons vu les bases du web scraping en comprenant les bases de la conception et de la structure des pages web. Nous avons également acquis une expérience pratique en extrayant des données d'articles de presse. Le web scraping peut faire des merveilles s'il est bien fait. Par exemple, un modèle entièrement optimisé peut être créé sur la base des données extraites qui peuvent prédire les catégories et montrer des résumés à l'utilisateur. La chose la plus importante à faire est de déterminer vos besoins et de comprendre la structure de la page. Python dispose de bibliothèques très puissantes mais faciles à utiliser pour extraire les données de votre choix. Cela a rendu le web scraping très facile et amusant.  

Il est important de noter que ce code est utile pour extraire des données de cette page web particulière. Si nous voulons le faire à partir d'une autre page, nous devons optimiser notre code en fonction de la structure de cette page. Mais une fois que nous savons comment les identifier, le processus est exactement le même.

Cet article a pour but d'expliquer en profondeur l'approche pratique du web scraping pour les articles d'actualité en utilisant Python. Une chose à retenir est que le proxy est une nécessité absolue pour le web scraping. Il permet d'éviter les blocages d'IP du serveur cible. ProxyScrape Le proxy résidentiel de Python fournit un proxy résidentiel excellent et fiable pour vos projets de web scraping d'articles d'actualité en utilisant Python.