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é.
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.
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.
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 :
# 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)
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 :
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.
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.
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.
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.