[PYTHON] [Introduction à WordCloud] Jouez avec le scraping ♬

WordCloud, j'ai essayé de gratter l'article et de le créer avec cette phrase car c'était une question sur l'en-tête de la phrase. Il est facile d'essayer de gratter un peu, mais il était difficile d'analyser le html par tous les moyens, mais comme il est devenu facile d'obtenir l'article, je vais l'écrire sous forme d'article. 【référence】 ① J'ai essayé de gratter les principaux titres des actualités de "Yahoo! News" avec pythonObtenez le titre de Nihon Keizai Shimbun avec Python3

Ce que j'ai fait

・ Grattage facile ・ Obtenez la rubrique Yahoo News ・ Article WC Nikkei

・ Grattage facile

La référence (1) semble s'appliquer à ce que je veux faire, donc cela n'a pas fonctionné, mais la référence (2) fonctionne bien et est facile à comprendre, je vais donc entrer ici. Donc, si vous regardez Reference ② et que vous vous référez ensuite à Reference ①, le code suivant sera appliqué.

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import requests
import urllib3
import re

url = "http://www.nikkei.com/"
"""
#Si vous utilisez des requêtes, c'est l'endroit
r = requests.get(url)
print(r.headers)
print("--------")
print(r.encoding)
print(r.content)
print(r.text)
soup = BeautifulSoup(r.text, 'html.parser')
#print(soup)
"""

#Si vous utilisez urllib3, c'est l'endroit
http = urllib3.PoolManager()
r = http.request('GET', url)

soup = BeautifulSoup(r.data, 'html.parser')
#print(soup)
#Obtenez l'élément de titre →<title>Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei</title>
title_tag = soup.title
#Obtenir la chaîne d'élément → Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei
title = title_tag.string
#Élément de titre de sortie
print(title_tag)
#Titre de sortie sous forme de chaîne de caractères
print(title)

Le même résultat est obtenu avec les requêtes. L'argument de BeautifulSoup est un peu différent car r est différent. Le résultat est

http://www.nikkei.com/


<title>Nihon Keizai Shimbun</title>
Nihon Keizai Shimbun

Si vous obtenez la page de l'article Nikkei, ce sera comme suit

https://www.nikkei.com/article/DGXMZO56522090X00C20A3000000/


<title>Plus de 100000 nouvelles infections corona deviennent une épidémie mondiale en 3 mois (photo)=Reuters):Nihon Keizai Shimbun</title>
Plus de 100000 nouvelles infections corona deviennent une épidémie mondiale en 3 mois (photo)=Reuters):Nihon Keizai Shimbun

・ Obtenez la rubrique Yahoo News

# -*- coding: utf-8 -*-

url = "https://news.yahoo.co.jp"
#Si vous utilisez urllib3, c'est l'endroit
http = urllib3.PoolManager()
r = http.request('GET', url)

soup = BeautifulSoup(r.data, 'html.parser')
#Obtenez l'élément de titre
title_tag = soup.title
#Obtenez la chaîne d'éléments
title = title_tag.string
#Élément de titre de sortie
print(title_tag)
#Titre de sortie sous forme de chaîne de caractères
print(title)

#Ajouté ci-dessous
for title in soup.select("p"):
    print(title.getText())

Les résultats suivants ont été obtenus. Cependant, je vais regarder la page du haut, mais je ne suis pas sûr car c'est un peu différent de ce qui est réellement aligné.

https://news.yahoo.co.résultat jp.


<title>Yahoo!nouvelles</title>
Yahoo!nouvelles
mot-clé:
Chercher
Obtenez de nouveaux plus facilement avec ID
S'identifier
JavaScript est actuellement désactivé. Yahoo!Pour utiliser toutes les fonctionnalités de News, veuillez activer les paramètres JavaScript. Cliquez ici pour savoir comment modifier les paramètres JavaScript.
En savoir plus
Liste des sujets dans toutes les catégories
Courses hippiques sans spectateur Avantages pour le cheval le plus populaire?
Pourquoi? Mon adresse sur Amazon ... Publié comme emplacement du vendeur. "Je meurs d'envie de m'inquiéter" Je me méfie des femmes
"Je veux sauter du navire", appelant l'un après l'autre dans une salle privée en attente, nouvelle corona
Rush retour au Japon, fête d'adieu annulée "Que dois-je faire?" Cris de résidents japonais en Chine et en Corée du Sud
La Corée du Sud fait rage contre les restrictions d'immigration du Japon, contre-mesures "anti-Japon" pleines de contradictions
L'épine coincée dans votre doigt va-t-elle au cœur? Si vous le retirez vous-même, utilisez une balle de 5 yens
Yahoo!Page spéciale JAPON
Résumé des nouvelles infections à coronavirus
L'Assemblée préfectorale de Shizuoka met en place un grand nombre de masques sur le net, affirmant que "ce n'est pas un produit de revente, il n'y a pas de problème" [New Corona]
Première infection confirmée dans la préfecture de Gunma Nouveau virus corona
La première personne infectée à Hiroshima "Seki" depuis un mois
La première personne infectée à Hiroshima "Seki" depuis un mois
Nouvelle corona, infection domestique 56 personnes en 6 jours seulement
"Matière étrangère mélangée" et mensonge. Le commis à ce moment-là l'a trouvé dans un autre magasin ...
Les anciens AKB48 «Mayumi Watanabe» et «UTAGE!» Qui ont disparu sont également absents, ce qui lui arrive
Préoccupations concernant une nouvelle infection corona: Raison pour laquelle 50% des cliniques dentaires sont dangereuses
Comportement trop stupide des imbéciles qui se perdent à Corona
Le Japon est enfin terminé
Pourquoi "Shinkansen Tobira" est-il si étroit ...? Raison de cette convaincante

Alors, sortons l'article de Nikkei Cela a en quelque sorte obtenu Informations sur cette page.

https://www.nikkei.com/article/DGXMZO56522090X00C20A3000000/


<title>Plus de 100000 nouvelles infections corona deviennent une épidémie mondiale en 3 mois (photo)=Reuters):Nihon Keizai Shimbun</title>
Plus de 100000 nouvelles infections corona deviennent une épidémie mondiale en 3 mois (photo)=Reuters):Nihon Keizai Shimbun
Sauvegarder l'article
Uniquement disponible pour les membres payants. Vous pouvez également afficher les articles enregistrés sur votre smartphone ou tablette.
> Inscription des nouveaux membres
> Connexion
Enregistrer Evernote
L'inscription des membres est requise pour utiliser
> Inscription des nouveaux membres
> Connexion
Si vous souhaitez partager des articles dans des entreprises, réimprimer / dupliquer dans des documents de réunion, des commandes d'impression, etc., veuillez consulter le lien.
Cliquez ici pour plus de détails

Le nombre de personnes infectées par le nouveau virus corona augmente rapidement en Iran (capitale Téhéran)=Reuters
[Genève=Rintaro Hosokawa] Le nombre de personnes infectées par le nouveau virus corona dans le monde a dépassé 100 000. Environ trois mois après l'apparition du premier patient à Wuhan, dans la province du Hubei, en Chine en décembre 2019, il s'est rapidement propagé à d'autres pays d'Asie, en Europe et aux États-Unis. Même maintenant, la propagation de l'infection ne devrait pas prendre fin, et les restrictions de voyage et les événements à grande échelle sont annulés les uns après les autres. La menace des virus jette une grande ombre sur la vie des gens et les activités des entreprises.

Le nombre de personnes infectées a largement dépassé le syndrome respiratoire aigu sévère (SRAS) survenu en 2002-03 et le syndrome respiratoire du Moyen-Orient (MERS) survenu en 2012 et est devenu une épidémie mondiale.
Selon les données agrégées de l'Université Johns Hopkins aux États-Unis, le nombre de personnes infectées dans le monde est d'environ 102 000 (à 6 h 00 le 7 du Japon). Environ 80% de ceux-ci sont en Chine (continentale). Hormis la Chine, la Corée du Sud en compte le plus grand nombre, avec environ 6 600 personnes. Viennent ensuite l'Iran (environ 4750 personnes) et l'Italie (environ 4640 personnes). Le Japon a dépassé les 400 personnes.
Récemment, alors que le nombre de nouvelles infections a diminué en Chine, le nombre d'infections dans d'autres pays / régions a augmenté rapidement. Lors d'une conférence de presse le 6, Tedros, le secrétaire général de l'Organisation mondiale de la santé (OMS), s'est dit "profondément préoccupé" par la propagation mondiale. En particulier, il s'est dit vivement préoccupé par la propagation de l'infection dans les pays en développement où l'infrastructure médicale est vulnérable. Il a déclaré: "Je veux que tous les pays fassent de l'endiguement des virus une priorité absolue", et a appelé à de nouvelles mesures telles que le renforcement des systèmes médicaux et des mesures aux frontières.
La recherche sur les vaccins et les agents thérapeutiques a commencé dans chaque pays. Selon l'OMS, 20 vaccins sont actuellement en cours de développement et de nombreuses études cliniques sont en cours pour des agents thérapeutiques. Cependant, il existe de nombreux points peu clairs tels que l'infectivité de la nouvelle Corona. Certains disent que l'infection ralentira à mesure que la température monte vers l'été. Cependant, l'OMS a exhorté à ne pas se relâcher, déclarant: "Il n'y a aucune preuve que le virus disparaîtra en été, et nous devons supposer qu'il continuera à se propager."
En raison de la propagation de la nouvelle Corona, les restrictions de voyage et les annulations de voyages d'affaires et de voyages se répandent dans chaque pays. Les usines de pièces automobiles ont été contraintes de fermer dans le nord de l'Italie, où les infections sont endémiques. Nombreux sont ceux qui craignent que la circulation des personnes et des biens stagne rapidement et n’aura de graves répercussions sur l’économie mondiale. Le Fonds monétaire international (FMI) a indiqué que ses prévisions de croissance économique mondiale sur 20 ans pourraient être la croissance la plus faible en 11 ans depuis 2009, immédiatement après la crise financière.
Le 30 janvier, l'OMS a déclaré la nouvelle Corona «une urgence de santé publique de portée internationale». Environ un mois plus tard, le 28 février, le niveau de risque global a été porté au niveau le plus élevé de «très élevé» en quatre étapes.
Selon l'OMS, il est important de bien se laver les mains et d'essuyer régulièrement votre ordinateur avec un désinfectant pour éviter les infections. D'autre part, les personnes asymptomatiques n'ont pas besoin de porter de masque à des fins préventives et sont invitées à s'abstenir de toute utilisation excessive.

Sélectionnez un forfait gratuit / payant
Voici les membres
Sauvegarder l'article
Uniquement disponible pour les membres payants. Vous pouvez également afficher les articles enregistrés sur votre smartphone ou tablette.
> Inscription des nouveaux membres
> Connexion
Enregistrer Evernote
L'inscription des membres est requise pour utiliser
> Inscription des nouveaux membres
> Connexion
Si vous souhaitez partager des articles dans des entreprises, réimprimer / dupliquer dans des documents de réunion, des commandes d'impression, etc., veuillez consulter le lien.
Cliquez ici pour plus de détails
Top version électronique
communiqué de presse
Acceptation du Fonds de secours pour le typhon n ° 19
La version électronique est gratuite le premier mois! Cliquez ici pour plus de détails
Météo
Recherche de communiqués de presse
Liste de comptes
Correction / excuses

・ Article WC Nikkei

À ce stade, tout ce que vous avez à faire est d'ajouter le code du WC. WordCloud/yahoo_title.py

#$ python3 yahoo_title.py -d /usr/lib/aarch64-linux-gnu/mecab/dic/mecab-ipadic-neologd conversation_anzen.csv -s stop_words.txt

import requests
from bs4 import BeautifulSoup
import urllib3
import re
import argparse
from MeCab import Tagger
from wordcloud import WordCloud
import matplotlib.pyplot as plt

parser = argparse.ArgumentParser(description="convert csv")
parser.add_argument("input", type=str, help="csv file")
parser.add_argument("--dictionary", "-d", type=str, help="mecab dictionary")
parser.add_argument("--stop_words", "-s", type=str, help="stop words list")
args = parser.parse_args()

t = Tagger(" -d " + args.dictionary)

#url = "https://news.yahoo.co.jp"
url = "https://www.nikkei.com/article/DGXMZO56522090X00C20A3000000/"

stop_words = []
if args.stop_words:
    for line in open(args.stop_words, "r", encoding="utf-8"):
        stop_words.append(line.strip())

#Une fonction qui convertit une liste en chaîne
def join_list_str(list):
    return ' '.join(list)

#Fonction d'exclusion de mots vides
def exclude_stopword(text):
    changed_text = [token for token in text.lower().split(" ") if token != "" if token not in stop_words]
    #S'il est laissé comme ci-dessus, il sera au format liste, alors convertissez-le en une chaîne de caractères délimitée par un blanc
    changed_text = join_list_str(changed_text)
    return changed_text

#Utilisez urllib3
http = urllib3.PoolManager()
r = http.request('GET', url)
yahoo = BeautifulSoup(r.data, 'html.parser')

wc = WordCloud(font_path="/home/muauan/.fonts/NotoSansCJKjp-Regular.otf")
sk=0
for title in yahoo.select("p"):
    title = title.getText()
    title = re.sub(r"[^un-龥-Hmm-0-9]", "", title)
    
    if len(title)>50:
        print("content{};{}".format(sk,title))
        splitted = " ".join([x.split("\t")[0] for x in t.parse(title).splitlines()[:-1] if x.split("\t")[1].split(",")[0] not in ["Particule", "Verbe auxiliaire", "adverbe", "Coalm", "verbe"]])
        splitted = exclude_stopword(splitted)
        wc.generate(splitted)
        plt.axis("off")
        plt.title("content_{};".format(sk))
        plt.tight_layout()
        plt.imshow(wc)
        plt.pause(0.05)
        plt.savefig('./output_yahoo/yahoo{}_{}.png'.format(sk,title[0:10])) 
        plt.close()
        sk += 1

En tant que mots vides, j'utilise également le fichier japanese.txt précédent.

Numéro d'article Phrase WordCloud
content0 Rintaro Hosokawa, Geneb Le nombre de personnes infectées par le nouveau virus corona dans le monde a dépassé 100 000. Même maintenant, il n'y a aucune chance que la propagation de l'infection prenne fin, et la menace de virus tels que les restrictions de voyage et l'annulation d'événements à grande échelle jette une grande ombre sur la vie des gens et les activités des entreprises. yahoo0_Genève Rintaro Hosokawa.png
content1 Le nombre de personnes infectées a largement dépassé le syndrome respiratoire aigu sévère survenu en 20023 et le syndrome respiratoire du Moyen-Orient survenu en 2012 et est devenu une épidémie mondiale. yahoo1_Le nombre de personnes infectées est de 20020.png
content2 Selon les données recueillies par l'Université John's Hopkins aux États-Unis, le nombre de personnes infectées dans le monde est d'environ 102 000 à 6 heures du matin le 7 du Japon. L'Iran compte environ 4750 habitants, l'Italie environ 4640 habitants et le Japon plus de 400 habitants. yahoo2_Johns Hopkins.png
content3 Récemment, le nombre de nouvelles infections a diminué en Chine, mais le nombre d'infections dans d'autres pays augmente rapidement. Le secrétaire général de l'Organisation mondiale de la santé, Tedros, s'est dit profondément préoccupé par la propagation mondiale lors d'une conférence de presse le 6. Tous les pays qui se sont déclarés vivement préoccupés par la propagation de l'infection aux pays en développement dotés d'une infrastructure médicale particulièrement vulnérable ont demandé que le confinement des virus soit une priorité absolue et ont pris de nouvelles mesures telles que le renforcement des systèmes médicaux et des mesures aux frontières. Demandé de prendre yahoo3_Récemment un nouveau sentiment en Chine.png
content4 Selon les recherches sur les vaccins et les agents thérapeutiques dans chaque pays, 20 vaccins sont actuellement en cours de développement et de nombreuses recherches cliniques sont en cours pour des agents thérapeutiques.Toutefois, la nouvelle Corona présente de nombreux points flous comme l'infectiosité pour l'été prochain. Il y a aussi des voix selon lesquelles l'infection ralentira à mesure que la température augmente, mais rien ne prouve que le virus disparaîtra en été et il faut supposer qu'il continuera à se propager, et il a appelé à ne pas se détendre. yahoo4_Vaccins et remèdes dans chaque pays.png
content5 En raison de la propagation de la nouvelle Corona, les restrictions de voyage et les annulations de voyages d'affaires se répandent dans chaque pays. Dans le nord de l'Italie, où le nombre d'infections augmente rapidement, les mouvements de personnes et de marchandises dont les usines de pièces automobiles ont été forcées de fermer stagnent rapidement. Beaucoup craignent que ce ne soit un coup dur pour l'économie mondiale.Le Fonds monétaire international a indiqué qu'il s'agirait de la croissance la plus faible en 11 ans depuis 2009, immédiatement après la crise financière, en ce qui concerne les prévisions du taux de croissance de l'économie mondiale dans 20 ans. yahoo5_Propagation d'une nouvelle infection corona.png
content6 Environ un mois après avoir déclaré la nouvelle Corona comme une urgence de santé publique de portée internationale le 30 janvier, le niveau de risque mondial a été élevé au plus haut niveau en quatre étapes le 28 février. Élevé yahoo6_Est un nouveau modèle le 30 janvier.png
content7 Selon le rapport, il est important de bien se laver les mains et d'essuyer régulièrement l'ordinateur avec un désinfectant pour prévenir les infections, mais les personnes sans symptômes n'ont pas besoin de porter un masque à des fins préventives et de l'utiliser de manière excessive. Demander à s'abstenir yahoo7_Selon pour prévenir l'infection.png

Je ne suis pas très satisfait, mais je pense que cela montre des mots qui représentent des phrases. Quant à savoir dans quelle mesure vous devriez être satisfait, je voudrais que vous traitiez la première phrase plus que les noms de personnes comme Genève, comme l'annulation de l'événement et l'incapacité de voir la convergence de la propagation de l'infection. .. ..

Résumé

・ J'ai essayé de récupérer des articles de presse dans WordCloud ・ Il s'est avéré qu'il peut être converti presque en temps réel.

・ Je veux l'utiliser plus activement ・ Élargissez l'application du grattage

Recommended Posts

[Introduction à WordCloud] Jouez avec le scraping ♬
[Introduction à Python] Utilisons foreach avec Python
Premiers pas avec le Web Scraping
Jouons avec la 4e dimension 4e
Jouons avec les données Amedas - Partie 1
[Introduction à WordCloud] Il est facile à utiliser même avec Jetson-nano ♬
Introduction à RDB avec sqlalchemy Ⅰ
Jouons avec les données Amedas - Partie 4
Jouons avec JNetHack 3.6.2 qui est plus facile à compiler!
Jouons avec les données Amedas - Partie 3
Jouons avec les données Amedas - Partie 2
[Jouons avec Python] Traitement d'image en monochrome et points
Jouons avec Excel avec Python [Débutant]
Introduction à RDB avec sqlalchemy II
[Introduction à Python] Utilisons les pandas
Faisons du scraping d'images avec Python
[Introduction à Python] Utilisons les pandas
[Introduction à Python] Utilisons les pandas
Sentons-nous comme un chercheur de matériaux avec python [Introduction à pymatgen]
[Complément] [PySide] Jouons avec Qt Designer
Introduction au remplissage d'image Python Remplissage d'image à l'aide d'ImageDataGenerator
Fractal pour faire et jouer avec Python
Je veux jouer avec aws avec python
[Introduction à Pytorch] J'ai joué avec sinGAN ♬
[Part1] Scraping avec Python → Organisez jusqu'à csv!
Introduction aux tests d'hypothèses statistiques avec des modèles de statistiques
Introduction à MQTT (Introduction)
Introduction à Scrapy (1)
Jouez avec Prophet
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Grattage au sélénium
Introduction à l'intelligence artificielle avec Python 1 «Théorie des algorithmes génétiques»
Jeu à la main en Python (commençons avec AtCoder?)
Introduction à Scrapy (3)
Premiers pas avec Supervisor
Grattage de la nourriture avec python et sortie en CSV
Grattage au sélénium ~ 2 ~
Grattage avec Python
Markov Chain Artificial Brainless avec Python + Janome (1) Introduction à Janome
Introduction à Python Préparons l'environnement de développement
Chaîne de Markov artificielle sans cervelle avec Python + Janome (2) Introduction à la chaîne de Markov
Introduction à Tkinter 1: Introduction
[REAPER] Comment jouer à Reascript avec Python
Introduction à l'intelligence artificielle avec Python 2 «Pratique de l'algorithme génétique»
[Piyopiyokai # 1] Jouons avec Lambda: création d'une fonction Lambda
Grattage avec Python
[Introduction à StyleGAN2] Apprentissage indépendant avec 10 visages d'anime ♬
Jouez avec PyTorch
Introduction à Tornado (1): Framework Web Python démarré avec Tornado
Je voulais jouer avec la courbe de Bézier
Introduction à PyQt
Introduction à Scrapy (2)
Jouez avec 2016-Python
Grattage avec du sélénium
Introduction au vol en formation avec Tello edu (Python)
[Introduction à minimiser] Analyse des données avec le modèle SEIR ♬
[Linux] Introduction à Linux
Introduction à Python avec Atom (en route)
Introduction à Scrapy (4)
Introduction à discord.py (2)