[PYTHON] Les informations Web scrapées sont sorties sous forme audio avec OpenJtalk

Cette fois, nous demanderons à Raspberry Pi de parler du cours de l'action obtenu par le web scraping en utilisant OpenJtalk.

Que pouvez-vous faire avec cet article

  1. Web scraping
  2. Parlez avec OpenJtalk installé sur Raspberry Pi avec les informations acquises

supposition

・ Python 3 et OpenJtalk peuvent être utilisés sur Raspberry Pi (L'installation d'OpenJtalk est expliquée dans cet article, donc si vous ne l'avez pas déjà fait!)

Environnement d'exploitation

・ Raspberry Pi3 modèle B ・ Système d'exploitation: Raspbian ・ Python ver3.7

1. Obtenez le cours de l'action par web scraping

Le code est basé sur l'article suivant. Web scraping en Python3: https://qiita.com/Senple/items/724e36fc1f66f5b14231 Obtenez des stocks: https://qiita.com/Azunyan1111/items/9b3d16428d2bcc7c9406

Pour le moment, le web scraping peut entrer en contact avec la loi si vous faites une erreur, donc si vous êtes nouveau dans ce domaine, nous vous recommandons de lire cet article. ..

Écrivons le code.

Ceci est une série Python 3 Il s'agit d'un code pour obtenir le cours de l'action sur site Nikkei Shimbun et l'imprimer. Pour la signification du code, veuillez vous référer à cet article.

webscraping_test.py


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import urllib3 #this is installed as default
from bs4 import BeautifulSoup
import certifi

#URL
url = "https://www.nikkei.com/markets/kabu/"

#Html pour accéder à l'URL est retourné →<html><head><title>Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei</title></head><body....
html = urllib3.PoolManager(
    cert_reqs='CERT_REQUIRED',
    ca_certs=certifi.where())
r = html.request('GET', url)

#Manipulez le HTML avec une belle soupe
soup = BeautifulSoup(r.data, "html.parser")

#Extraire tous les éléments span → Tous les éléments span sont renvoyés dans le tableau →[<span class="m-wficon triDown"></span>, <span class="l-h...
#élément span->Insérer des phrases ordinaires comme les éléments p et div,La différence est qu'il n'y a pas de sauts de ligne
spans = soup.find_all("span")
for tag in spans:
    #Les éléments pour lesquels la classe n'est pas définie sont des balises.get("class").pop(0)Évitez l'erreur avec try car cela entraînera une erreur car vous ne pouvez pas faire
    try:
        #tag.get("class")Récupérez toutes les classes dans tag et renvoyez-les dans une liste
        string_ = tag.get("class").pop(0)

        if string_ in "mkc-stock_prices":
            stockprice = tag.string
            break
    except:
        pass

print(stockprice)

2. Sortie audio avec openJtalk

Afin de générer immédiatement les informations récupérées, vous devez exécuter openJtalk à partir de Python. (Installez OpenJtalk à partir d'ici](https://qiita.com/coffiego/items/4fc3b0be78fcded3eef0)) Donc, il y avait un article exécutant openJtalk depuis Python, je vais donc l'utiliser. Copiez et collez ce code dans le même répertoire que précédemment.

jtalk.py


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import subprocess
from datetime import datetime

def jtalk(t):
    open_jtalk=['open_jtalk']
    mech=['-x','/var/lib/mecab/dic/open-jtalk/naist-jdic']
    htsvoice=['-m','/usr/share/hts-voice/mei/mei_normal.htsvoice']
    speed=['-r','1.0']
    outwav=['-ow','open_jtalk.wav']
    cmd=open_jtalk+mech+htsvoice+speed+outwav
    c = subprocess.Popen(cmd,stdin=subprocess.PIPE)
    c.stdin.write(t.encode())
    c.stdin.close()
    c.wait()
    aplay = ['aplay','-q','open_jtalk.wav']
    wr = subprocess.Popen(aplay)

def say_datetime():
    d = datetime.now()
    text = '%s mois%jour de s,%temps de s%s minutes%s secondes' % (d.month, d.day, d.hour, d.minute, d.second)
    jtalk(text)

if __name__ == '__main__':
    say_datetime()

Après cela, importez ce code dans le code vers webscaraping Vous pouvez produire de l'audio en utilisant jtalk.jtalk ("ce que vous voulez dire")!

3. Web scraping + openJtalk

Combinez enfin. Cela dit, ajoutez simplement quelques lignes, mais ... Voici le code résultant.

webscraping_jtalk_test.py


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#python3
#Celui qui a gratté le cours de l'action est émis par la voix avec openjtalk.
#web scraping
#Cette fois avec Python3! !!

##web scraping library####
import urllib3 #this is installed as default
from bs4 import BeautifulSoup
import certifi

### jtalk import
import jtalk #J'importe ici! !!

#URL
url = "https://www.nikkei.com/markets/kabu/"

#Html pour accéder à l'URL est retourné →<html><head><title>Actualités économiques, boursières, commerciales et politiques:Version électronique Nikkei</title></head><body....
html = urllib3.PoolManager(
    cert_reqs='CERT_REQUIRED',
    ca_certs=certifi.where())
r = html.request('GET', url)

#Manipulez le HTML avec une belle soupe
soup = BeautifulSoup(r.data, "html.parser")

#Extraire tous les éléments span → Tous les éléments span sont renvoyés dans le tableau →[<span class="m-wficon triDown"></span>, <span class="l-h...
#élément span->Insérer des phrases ordinaires comme les éléments p et div,La différence est qu'il n'y a pas de sauts de ligne
spans = soup.find_all("span")
for tag in spans:
    #Les éléments pour lesquels la classe n'est pas définie sont des balises.get("class").pop(0)Évitez l'erreur avec try car cela entraînera une erreur car vous ne pouvez pas faire
    try:
        #tag.get("class")Récupérez toutes les classes dans tag et renvoyez-les dans une liste
        string_ = tag.get("class").pop(0)

        if string_ in "mkc-stock_prices":
            stockprice = tag.string
            break
    except:
        pass

jtalk.jtalk(str(stockprice)) #Sortie audio avec open j talk
#print(stockprice)

Dans l'annuaire jtalk.py webscraping_jtalk_test.py Si vous confirmez que c'est le cas, vous pouvez faire ce qui suit et il vous le dira.

$ ls
jtalk.py webscraping_jtalk_test.py
$ python3 webscraping_jtalk_test.py

Je t'ai dit! Mais vous venez de lire les nombres un par un. Lol Pour le moment, je pense qu'il peut être appliqué autant que possible.

Résumé

Cette fois, j'ai essayé le Web scraping + OpenJtalk! Avec cela, vous pouvez également parler les informations obtenues par l'API de la même manière. Écrivez un programme pour qu'il fonctionne à heure fixe le matin et laissez-le lire la météo et les nouvelles qui vous intéressent Puis! [Une addition] J'ai écrit un programme pour parler de la météo dans l'article suivant, donc si vous êtes intéressé, faites-le! URL: https://qiita.com/coffiego/items/ec050e6106a7424c048b

Recommended Posts

Les informations Web scrapées sont sorties sous forme audio avec OpenJtalk
Obtenez des informations sur la propriété en grattant avec python
Obtenez des informations sur les matchs de course de bateaux avec le web scraping
[Python-pptx] Afficher les informations de police PowerPoint au format csv avec python