Maison >développement back-end >Tutoriel Python >Web scraping et analyse de données en langues étrangères
Récemment, j'ai décidé que j'aimerais réaliser un projet rapide de web scraping et d'analyse de données. Parce que mon cerveau aime proposer de grandes idées qui prendraient beaucoup de temps, j'ai décidé de me mettre au défi de trouver quelque chose de simple qui pourrait être réalisé de manière viable en quelques heures.
Voici ce que j'ai trouvé :
Comme mon diplôme de premier cycle était à l'origine en langues étrangères (français et espagnol), j'ai pensé que ce serait amusant de récupérer sur le Web certaines données liées aux langues. Je voulais utiliser la bibliothèque BeautifulSoup, qui peut analyser du HTML statique mais n'est pas capable de gérer des pages Web dynamiques qui ont besoin d'événements onclick pour révéler l'ensemble de données (c'est-à-dire en cliquant sur la page de données suivante si la page est paginée).
J'ai opté pour cette page Wikipédia des langues les plus parlées.
Je voulais faire ce qui suit :
J'ai décidé de diviser le projet en ces étapes pour séparer les préoccupations, mais je voulais aussi éviter de faire plusieurs requêtes inutiles pour obtenir le code HTML de Wikipédia en réexécutant le script. Enregistrer le fichier HTML, puis travailler avec lui dans un script séparé signifie que vous n'avez pas besoin de demander à nouveau les données, car vous les avez déjà.
Le lien vers mon dépôt github pour ce projet est : https://github.com/gabrielrowan/Foreign-Languages-Analysis
Tout d’abord, j’ai récupéré et affiché le code HTML. Après avoir travaillé avec C# et C, c'est toujours une nouveauté pour moi de voir à quel point le code Python est court et concis ?
url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers' response = requests.get(url) html = response.text with open("languages_html.txt", "w", encoding="utf-8") as file: file.write(html)
Pour analyser le html avec Beautiful soup et sélectionner la table qui m'intéressait, j'ai fait :
with open("languages_html.txt", "r", encoding="utf-8") as file: soup = BeautifulSoup(file, 'html.parser') # get table top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')
Ensuite, j'ai obtenu le texte d'en-tête du tableau pour obtenir les noms de colonnes de mon dataframe pandas :
# get column names columns = top_languages_table.find_all("th") column_titles = [column.text.strip() for column in columns]
Après cela, j'ai créé le dataframe, défini les noms des colonnes, récupéré chaque ligne du tableau et écrit chaque ligne dans le dataframe :
# get table rows table_data = top_languages_table.find_all("tr") # define dataframe df = pd.DataFrame(columns=column_titles) # get table data for row in table_data[1:]: row_data = row.find_all('td') row_data_txt = [row.text.strip() for row in row_data] print(row_data_txt) df.loc[len(df)] = row_data_txt
Remarque : sans utiliser strip(), il y avait n caractères dans le texte qui n'étaient pas nécessaires.
Enfin, j'ai écrit le dataframe dans un .csv.
À l'avance, je me posais ces questions auxquelles je voulais répondre à partir des données :
Bien que je n'entrerai pas dans le code pour répondre à toutes ces questions, j'aborderai les 2 celles qui impliquaient des graphiques.
Tout d'abord, j'ai créé un dataframe qui n'incluait que les lignes où le nom de la branche était « Romance » ou « Germanic »
url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers' response = requests.get(url) html = response.text with open("languages_html.txt", "w", encoding="utf-8") as file: file.write(html)
Ensuite j'ai précisé l'axe x, l'axe y et la couleur des barres que je voulais pour le graphique :
with open("languages_html.txt", "r", encoding="utf-8") as file: soup = BeautifulSoup(file, 'html.parser') # get table top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')
Cela a créé :
Pour créer le diagramme circulaire, j'ai récupéré les 3 familles de langues les plus courantes et les ai placées dans un dataframe.
Ce groupe de codes obtient la somme totale des locuteurs natifs par famille de langues, les trie par ordre décroissant et extrait les 3 premières entrées.
# get column names columns = top_languages_table.find_all("th") column_titles = [column.text.strip() for column in columns]
Ensuite, je place les données dans un graphique à secteurs, en spécifiant l'axe Y des « locuteurs natifs » et une légende, qui crée des étiquettes à code couleur pour chaque famille de langues affichée dans le graphique.
# get table rows table_data = top_languages_table.find_all("tr") # define dataframe df = pd.DataFrame(columns=column_titles) # get table data for row in table_data[1:]: row_data = row.find_all('td') row_data_txt = [row.text.strip() for row in row_data] print(row_data_txt) df.loc[len(df)] = row_data_txt
Le code et les réponses pour le reste des questions peuvent être trouvés ici. J'ai utilisé le markdown dans le cahier pour écrire les questions et leurs réponses.
Pour ma prochaine itération d'un projet de web scraping et d'analyse de données, j'aimerais compliquer les choses avec :
Même si cela a été rapide, j'ai aimé réaliser ce projet. Cela m'a rappelé à quel point des projets courts et gérables peuvent être utiles pour attirer les représentants du cabinet ? De plus, extraire des données d'Internet et créer des graphiques à partir de celles-ci, même avec un petit ensemble de données, est-il amusant ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!