Analyse des flux RSS à l’aide de PySpark

Introduction
Un flux RSS (Really Simple Syndication) est un fichier en ligne qui contient des détails sur chaque élément de contenu publié par un site. Les flux RSS sont un moyen courant de distribuer des mises à jour provenant de sites Web et de blogs. Ces flux sont souvent fournis au format XML et Python propose plusieurs outils pour les analyser et en extraire des informations. Cet article de blog explorera comment analyser les flux RSS XML à l’aide de Pyspark.

Exemple de test de flux RSS
Conditions préalables
Avant de commencer, assurez-vous que Python est installé sur votre système (Lien pour installer Python- https://www.python.org/downloads/ ).
Comprendre les flux RSS et l’analyse XML
Les flux RSS contiennent des articles, des actualités ou d’autres mises à jour dans un format XML structuré. Pour travailler avec ces flux, nous pouvons utiliser la bibliothèque xml.etree.ElementTree ou feedparser en Python, qui fournit un moyen efficace d’analyser les données XML. Gardez à l’esprit que les flux RSS peuvent contenir des éléments supplémentaires au-delà du titre, du lien et de la description. Si nous utilisons xml.etree.ElementTree, nous devrons adapter le code d’analyse pour extraire d’autres éléments d’intérêt. Nous comprendrons l’utilisation et la mise en œuvre du module feedparser dans ce blog.
Fonctionnalité | xml.etree.ElementTree | Analyseur de flux |
Utilisation principale | Analyse et manipulation XML générales | Analyse des flux RSS et Atom |
Type de bibliothèque | Bibliothèque standard Python intégrée | Bibliothèque tierce (nécessite une installation) |
Installation | Aucune installation requise | Nécessite une installation (pip install feedparser) |
Se concentrer | Structures de données XML générales | Formats de syndication (RSS, Atom) |
Capacité d’analyse | Analyse les documents XML en objets ElementTree | Analyse les flux RSS et Atom en données structurées |
Prise en charge de XPath | Prise en charge de base de XPath pour les requêtes XML | Aucun; axé sur l’extraction de données de flux |
Gestion des éléments | Gère les éléments, les attributs et le texte avec une structure arborescente | Se concentre sur l’extraction des métadonnées et des entrées du flux |
Gestion du format de flux | Non spécialisé pour les flux RSS/Atom | Spécialisé pour gérer divers formats d’aliments |
Accès aux données | Parcours manuel et interrogation des éléments XML | API structurée pour accéder aux informations sur les flux |
Capacité de modification | Permet la création et la modification de structures XML | Lecture seule ; ne modifie pas les flux |
Gestion des erreurs | Gestion des erreurs de base pour l’analyse XML | Inclut la gestion des erreurs pour les problèmes d’analyse des flux |
Structure de sortie | Fournit des objets ElementTree avec une balise et du texte | Fournit un objet structuré de type dictionnaire pour les flux |
Cas d’utilisation courants | Tâches XML générales, telles que les fichiers de configuration ou l’échange de données | Agrégation et traitement des données de flux provenant de sources d’actualités |
Performance | Efficace pour les tâches XML standards | Optimisé pour l’analyse des flux, mais peut être moins flexible pour le XML sans flux |
ce qu’ils peuvent analyser | http://www.example.com http://www.example.com/first-post |
Étapes pour analyser les flux RSS XML
Passons aux étapes d’analyse d’un flux RSS XML à l’aide de Python
Importez les bibliothèques requises : commencez par importer toutes les bibliothèques nécessaires.
Remarque : Universal Feed Parser est un module Python qui télécharge et analyse les flux syndiqués. Il peut gérer RSS 0.90, Netscape RSS 0.91, Userland RSS 0.91, etc., Atom 1.0 et plus, les flux CDF et JSON. Il peut également analyser les modules d’extension populaires, comme les extensions iTunes de Dublin Core et Apple. Pour utiliser Universal Feed Parser, vous pouvez utiliser Python 3.8 ou des versions ultérieures. Universal Feed Parser n’est pas destiné à fonctionner de manière autonome ; c’est un module que vous pouvez utiliser dans le cadre d’un programme Python plus vaste. Universal Feed Parser est très facile à utiliser ; il a une fonction publique principale, « analyser ». La fonction d’analyse peut prendre plusieurs arguments, mais un seul d’entre eux est requis et il peut s’agir d’une URL, d’un nom de fichier local ou d’une chaîne brute contenant des données de flux dans n’importe quel format.
Examinons en profondeur l’analyse des flux RSS à l’aide de Pyspark.
1. Initialisez la session Spark, récupérez et chargez le flux RSS : créez une session Spark et téléchargez des fichiers à distance ou via une URL.
from pyspark.sql import SparkSession import feedparser import glob import os import sys os.environ['PYSPARK_PYTHON'] = sys.executable # Initialize SparkSession spark = SparkSession.builder \ .appName("RSS Feed Processor") \ .getOrCreate() file_names = glob.glob('c:/Users/Ashita Kumar/Downloads/*.xml')
2. Déclarez le schéma pour le bloc de données.
# Define schema for DataFrame schema = StructType([ StructField("file_name", StringType(), True), StructField("feed_title", StringType(), True), StructField("feed_link", StringType(), True), StructField("feed_description", StringType(), True), StructField("ID", StringType(), True), StructField("title", StringType(), True), StructField("description", StringType(), True), StructField("link", StringType(), True), StructField("image_link", StringType(), True), StructField("condition", StringType(), True), StructField("availability", StringType(), True), StructField("price", StringType(), True), StructField("name", StringType(), True), StructField("points_value", StringType(), True), StructField("ratio", StringType(), True), StructField("item_group_id", StringType(), True), StructField("brand", StringType(), True), StructField("product_type", StringType(), True), StructField("color", StringType(), True), StructField("size_of_product", StringType(), True), StructField("gender", StringType(), True), StructField("sale_price", StringType(), True), StructField("custom_label_0", StringType(), True), StructField("custom_label_1", StringType(), True), StructField("fb_product_category", StringType(), True), StructField("age_group", StringType(), True), ])
3. Parcourez tous les fichiers et analysez le fichier à l’aide de Feedparser. Utilisez la bibliothèque de requêtes pour récupérer le flux RSS à partir d’une URL et le charger dans un objet de flux. Nous pouvons charger le flux RSS à partir d’une URL ou même d’un emplacement de stockage.
# Create an empty list to store rows rows = [] # Iterate through all files for file in file_names: print("Processing file:", file) # Parse the XML file using feedparser feed = feedparser.parse(file) # Extract feed details feed_title = feed['feed'].get('title', '') feed_link = feed['feed'].get('link', '') feed_description = feed['feed'].get('description', '') # Title of the file print("title of the feed ", feed['feed']['title']) # Link of the Feed print("link of the feed ", feed['feed']['link']) # Description of the feed print("description of the feed", feed['feed']['description'])

Sortie des instructions d’impression pour les détails du flux
4. Analyser les éléments RSS : parcourez les éléments RSS pour extraire les informations pertinentes.
# Iterate through feed entries
for entry in feed.entries:
row = {"file_name": "big_bazar_file", # Use the actual file name
"feed_title": feed_title,
"feed_link": feed_link,
"feed_description": feed_description,
"ID": getattr(entry, 'g_id', ''),
"title": getattr(entry, 'g_title', ''),
"description": getattr(entry, 'g_description', ''),
"link": getattr(entry, 'g_link', ''),
"image_link": getattr(entry, 'g_image_link', ''),
"condition": getattr(entry, 'g_condition', ''),
"availability": getattr(entry, 'g_availability', ''),
"price": getattr(entry, 'g_price', ''),
"name": getattr(entry, 'g_name', ''),
"points_value": getattr(entry, 'g_points_value', ''),
"ratio": getattr(entry, 'g_ratio', ''),
"item_group_id": getattr(entry, 'g_item_group_id', ''),
"brand": getattr(entry, 'g_brand', ''),
"product_type": getattr(entry, 'g_product_type', ''),
"color": getattr(entry, 'g_color', ''),
"size_of_product": getattr(entry, 'g_size', ''),
"gender": getattr(entry, 'g_gender', ''),
"sale_price": getattr(entry, 'g_sale_price', ''),
"custom_label_0": getattr(entry, 'g_custom_label_0', ''),
"custom_label_1": getattr(entry, 'g_custom_label_1', ''),
"fb_product_category": getattr(entry, 'g_fb_product_category', ''),
"age_group": getattr(entry, 'g_age_group', '')}
rows.append(row)
5. Analysez et stockez les valeurs des éléments du flux RSS dans des blocs de données à l’aide de Spark. Nous pouvons créer une trame de données et l’utiliser à des fins d’analyse ou la stocker dans du parquet selon les besoins.
# Create Spark DataFrame df = spark.createDataFrame(rows, schema=schema) # Show the DataFrame with specific columns df.show(truncate=False) # Stop the Spark session spark.stop()

df.show() Sortie
Étapes pour analyser XML à l’aide de Python
Nous pouvons également analyser les flux RSS en utilisant uniquement Python. Nous pourrons y parvenir en utilisant les bibliothèques FeedParser et Pandas.
Avantages et inconvénients de l’utilisation du flux RSS
AVANTAGES | INCONVÉNIENTS |
1. Contenu agrégé | 1. Diminution de la popularité |
Regroupe le contenu de plusieurs sources en un seul flux. | Les flux RSS sont désormais moins populaires que les réseaux sociaux et autres agrégateurs d’actualités. |
2. Personnalisable | 2. Nécessite un lecteur RSS |
Les utilisateurs peuvent choisir et personnaliser leurs abonnements en fonction de leurs intérêts. | L’accès aux flux RSS nécessite un lecteur RSS ou une application d’agrégation. |
3. Mises à jour en temps réel | 3. Qualité incohérente |
Fournit des mises à jour immédiates lorsqu’un nouveau contenu est publié. | Certains flux peuvent être obsolètes ou avoir un format incohérent. |
4. Expérience sans publicité | 4. Prise en charge multimédia limitée |
Fournit du contenu sans publicité pour une expérience plus propre. | Peut ne pas bien gérer le contenu multimédia comme les vidéos ou les éléments interactifs. |
5. Confidentialité | 5. Contenu fragmenté |
L’abonnement aux flux ne nécessite pas d’informations personnelles, ce qui améliore la confidentialité. | Les flux sont répartis sur diverses plates-formes, qui peuvent être disjointes. |
6. Accès hors ligne | 6. L’expérience mobile peut varier |
Le contenu est accessible hors ligne via de nombreux lecteurs RSS. | Certains lecteurs RSS peuvent ne pas offrir une bonne expérience sur mobile ou tablette. |
7. Partage facile | 7. Surcharge potentielle d’informations |
Les flux peuvent être facilement partagés avec d’autres. | Les utilisateurs peuvent subir une surcharge d’informations s’ils s’abonnent à trop de flux. |
8. Pas de filtrage algorithmique | 8. Livraison de contenu statique |
Le contenu est livré par ordre chronologique sans manipulation algorithmique. | Les flux RSS fournissent généralement du contenu statique sans fonctionnalités interactives. |
Conclusion
L’analyse des flux RSS XML à l’aide de Python est une compétence précieuse pour travailler avec le contenu dynamique des sites Web et rester à jour avec les dernières informations. Vous pouvez analyser et extraire efficacement des données des flux RSS en utilisant la bibliothèque feedparser et les étapes décrites dans cet article de blog. N’oubliez pas d’ajuster le code d’analyse en fonction de la structure du flux RSS avec lequel vous travaillez.
Source link