Web Scraping pour les articles de presse en utilisant Python - La meilleure façon en 2023
post-titre

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 de connaissances, et c'est la seule façon d'innover notre technologie et d'amener notre humanité à des sommets plus élevés que jamais. Mais il y a beaucoup de nouvelles, et il est humainement impossible d'obtenir toutes les données manuellement. Quelle est la meilleure façon d'obtenir automatiquement ces données ? La réponse est le web scraping d'articles de presse 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 allons suivre les deux étapes suivantes afin d'analyser en profondeur la manière dont l'ensemble du processus est réalisé.

  1. Introduction de base aux pages web et au langage HTML.
  2. Raclage de sites Web à l'aide de Python et de la célèbre bibliothèque BeautifulSoup.

N'hésitez pas à passer d'une section à l'autre pour en savoir plus sur la façon d'effectuer du web scraping d'articles de presse à l'aide de python.

Table des matières

Introduction de base aux pages Web et au langage HTML

Si nous voulons retirer des informations importantes d'un site ou d'une page web, il est important de savoir comment ce site fonctionne. Lorsque nous nous rendons à 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 pour ajouter du contenu au site Web. Par exemple, si vous voulez ajouter du texte, des images ou tout autre élément à votre site Web, le HTML vous aide à le faire.

CSS (feuilles de style en cascade) : Est utilisé pour styliser les pages Web. Les CSS 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 manipulation logique et la fonctionnalité de la page Web. Il permet donc de rendre le contenu et le style interactifs.

Ces trois langages de programmation nous 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., pourraient ê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 de la manière dont les informations y sont contenues, et nous sommes prêts à partir.

Récupération d'articles de presse sur le Web à l'aide de BeautifulSoup en Python

Python possède plusieurs paquets qui nous permettent de gratter des informations à partir 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 scraping web.

BeautifulSoup est la meilleure solution 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 d'Internet n'importe quel type de texte du site web de notre choix, ce qui en fait un paquet facile à utiliser mais puissant.

Nous commençons par les bases. Pour installer le paquetage de 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 installer les demandes

Ce module de requêtes nous permettra d'obtenir le code HTML de la page Web et de la parcourir à l'aide du paquet BeautfulSoup. Les deux commandes qui vont nous faciliter la tâche sont les suivantes

find_all(élément tag, attribut) : Cette fonction prend la balise et les attributs comme paramètres et nous 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 obtenir uniquement le premier élément.

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

Pour naviguer dans le code HTML de notre page Web et localiser les éléments que nous voulons gratter, 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 le BeautifulSoup.

Pour cet article, nous allons réaliser avec le journal anglais EL Paris. Nous allons scrapper les titres des articles de la première page et ensuite 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 comme celle-ci,

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:

Importation des demandes
de bs4 import BeautifulSoup

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

# Demande
r1 = requests.get(url)
r1.status_code
 
# Nous allons sauvegarder 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. Par conséquent, il doit retourner une liste dans laquelle chaque élément est un article de presse,

Pour pouvoir extraire le texte, nous allons utiliser 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 maîtrisé tous les concepts jusqu'à ce point, vous pouvez faire du web scrape avec le contenu de votre choix.

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

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

nombre_de_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'] : 
        continuez
    
    # Obtenir le lien de l'article
    link = coverpage_news[n].find('a')['href']
    list_links.append(link)
    
    # Récupérer 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
    soupe_article = BeautifulSoup(article_content, 'html5lib')
    body = soup_article.find_all('div', class_='articulo-cuerpo')
    x = body[0].find_all('p')
    
    # Unifier les paragraphes
    list_paragraphes = []
    for p in np.arange(0, len(x)) :
        paragraphe = x[p].get_text()
        list_paragraphes.append(paragraphe)
        final_article = " ".join(list_paragraphes)
        
    news_contents.append(article_final)

Mettons les articles extraits dans ce qui suit :

  • Un jeu de données qui entrera les 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 définir une meilleure expérience utilisateur, nous allons également mesurer le temps que prend un script pour obtenir les nouvelles. Nous allons définir une fonction pour cela et ensuite l'appeler. Encore une fois, je ne vais pas expliquer chaque ligne de code car le code est commenté. Pour avoir une compréhension claire, 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 l'extraction 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 de proxy comprennent des serveurs proxy dédiés aux centres de données, des serveurs proxy résidentiels et des 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 de voir les caractéristiques de chaque serveur proxy.

Un proxy de centre de données dédié est le mieux adapté aux tâches en ligne à grande vitesse, telles que la transmission 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 le site proxys dédié pour transmettre de grandes quantités de données dans un court laps de temps.

Un proxy de centre de données dédié possède plusieurs caractéristiques, telles qu'une bande passante et des connexions simultanées illimitées, un site HTTP dédié proxys pour faciliter la communication, et une authentification IP pour plus de sécurité. Avec un temps de fonctionnement 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 clientèle et vous aidera à résoudre votre problème dans les 24-48 heures ouvrables. 

Le suivant est un proxy résidentiel. Le proxy résidentiel est le proxy de référence pour tout consommateur général. La raison principale est que l'adresse IP d'un proxy résidentiel ressemble à l'adresse IP fournie par le FAI. Cela signifie qu'obtenir la permission du serveur cible pour accéder à ses données sera plus facile que d'habitude. 

L'autre caractéristique du proxy résidentiel de ProxyScrapeest une fonction de rotation. 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 dehors de cela, les autres caractéristiques d'un proxy résidentiel sont : une bande passante illimitée, ainsi qu'une connexion simultanée, un HTTP/s dédié proxys, proxys à tout moment de la session en raison de plus de 7 millions de proxys dans le pool de proxy, l'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. Premium proxys est identique au centre de données dédié proxys. La fonctionnalité reste la même. La principale différence est l'accessibilité. Dans le cas de Premium proxys, la liste des serveurs mandataires (la liste qui contient proxys) est mise à la disposition de chaque utilisateur du réseau de ProxyScrape. C'est pourquoi 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 scraping web 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 sera dynamiquement modifiée au cours d'une période donnée, 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 le code 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 :

  1. Récupérer les commentaires sur YouTube - 5 étapes simples
  2. Les 8 meilleurs outils de scraping web en Python 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 extraire automatiquement des données de n'importe quel article d'actualité. La seule condition requise est une connaissance de base de l'HTML pour localiser la balise HTML du code source de la page qui contient les données qui doivent être extraites.

2. Est-il possible de récupérer des articles de presse sur le site Web ?

La réponse est que cela dépend des conditions générales du site Web. Mais la plupart des articles d'actualité peuvent être scrappés puisque toutes les informations sont intentionnellement mises à la disposition du public. Toutes les données publiques peuvent être scrappées tant que votre méthode de scrappage ne nuit pas aux données ou au propriétaire du site Web.

3. Comment gratter Google News à l'aide de Python ?

Vous pouvez récupérer des articles de Google News ou de n'importe quel autre article de presse 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 du flux des pages web. Nous avons également fait une expérience pratique en extrayant des données d'articles de presse. Le web scraping peut faire des merveilles s'il est fait correctement. Par exemple, il est possible de créer un modèle entièrement optimisé à partir des données extraites, capable de prédire les catégories et de 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 possède des bibliothèques très puissantes et 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 de toute 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 détail l'approche pratique du web scraping d'articles d'actualité à l'aide de Python. Une chose à retenir est que le proxy est une nécessité absolue pour le web scraping. Il permet d'éviter tout blocage d'IP du serveur cible. ProxyScrape fournit un proxy résidentiel excellent et fiable pour vos projets de web scraping d'articles de presse en utilisant python.