[PYTHON] Web-Scraped-Informationen werden mit OpenJtalk als Audio ausgegeben

Dieses Mal werden wir Raspberry Pi bitten, über den Aktienkurs zu sprechen, der durch Web Scraping mit OpenJtalk erzielt wird.

Was können Sie mit diesem Artikel tun?

  1. Web Scraping
  2. Sprechen Sie mit OpenJtalk, das auf Raspberry Pi installiert ist, mit den erfassten Informationen

Annahme

・ Python 3 und OpenJtalk können auf Raspberry Pi verwendet werden (Die Installation von OpenJtalk wird in [diesem Artikel] erläutert (https://qiita.com/coffiego/items/4fc3b0be78fcded3eef0). Wenn Sie dies noch nicht getan haben!)

Betriebsumgebung

・ Himbeer P i3 Modell B. ・ Betriebssystem: Raspbian ・ Python Version 3.7

1. Ermitteln Sie den Aktienkurs durch Web Scraping

Der Code basiert auf dem folgenden Artikel. Web Scraping in Python3: https://qiita.com/Senple/items/724e36fc1f66f5b14231 Lagerbestand: https://qiita.com/Azunyan1111/items/9b3d16428d2bcc7c9406

Derzeit kann Web Scraping mit dem Gesetz in Berührung kommen, wenn Sie einen Fehler machen. Wenn Sie neu darin sind, empfehlen wir Ihnen, [diesen Artikel] zu lesen (https://qiita.com/nezuq/items/c5e827e1827e7cb29011). ..

Schreiben wir den Code.

Dies ist eine Python 3-Serie Es ist ein Code, um den Aktienkurs von Nikkei Shimbun Site abzurufen und auszudrucken. Die Bedeutung des Codes finden Sie in diesem Artikel.

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 für den Zugriff auf die URL wird zurückgegeben →<html><head><title>Wirtschafts-, Aktien-, Geschäfts- und politische Nachrichten:Nikkei elektronische Version</title></head><body....
html = urllib3.PoolManager(
    cert_reqs='CERT_REQUIRED',
    ca_certs=certifi.where())
r = html.request('GET', url)

#Behandeln Sie HTML mit schöner Suppe
soup = BeautifulSoup(r.data, "html.parser")

#Alle Span-Elemente extrahieren → Alle Span-Elemente werden im Array zurückgegeben →[<span class="m-wficon triDown"></span>, <span class="l-h...
#span Element->Fügen Sie gewöhnliche Sätze wie p- und div-Elemente ein,Der Unterschied besteht darin, dass es keine Zeilenumbrüche gibt
spans = soup.find_all("span")
for tag in spans:
    #Elemente, für die keine Klasse festgelegt ist, sind Tags.get("class").pop(0)Vermeiden Sie den Fehler mit try, da dies zu einem Fehler führt, da dies nicht möglich ist
    try:
        #tag.get("class")Holen Sie sich alle Klassen in Tag und geben Sie sie in einer Liste zurück
        string_ = tag.get("class").pop(0)

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

print(stockprice)

2. Audio mit openJtalk ausgeben

Um die gescrapten Informationen sofort auszugeben, müssen Sie openJtalk von Python aus ausführen. (Installieren Sie OpenJtalk von hier aus) (https://qiita.com/coffiego/items/4fc3b0be78fcded3eef0)) Es gab also einen Artikel, in dem openJtalk von Python ausgeführt wurde, also werde ich ihn verwenden. Kopieren Sie diesen Code und fügen Sie ihn in dasselbe Verzeichnis wie zuvor ein.

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 Monat%s Tag,%s Zeit%s Minuten%s Sekunden' % (d.month, d.day, d.hour, d.minute, d.second)
    jtalk(text)

if __name__ == '__main__':
    say_datetime()

Importieren Sie danach diesen Code in den Code in webscaraping Sie können Audio mit jtalk.jtalk ausgeben ("was Sie sagen möchten")!

3. Web Scraping + openJtalk

Zum Schluss kombinieren. Das heißt, fügen Sie nur ein paar Zeilen hinzu, aber ... Hier ist der resultierende Code.

webscraping_jtalk_test.py


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#python3
#Derjenige, der den Aktienkurs abgekratzt hat, wird per Stimme mit openjtalk ausgegeben.
#web scraping
#Diesmal mit Python3! !!

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

### jtalk import
import jtalk #Ich importiere hier! !!

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

#HTML für den Zugriff auf die URL wird zurückgegeben →<html><head><title>Wirtschafts-, Aktien-, Geschäfts- und politische Nachrichten:Nikkei elektronische Version</title></head><body....
html = urllib3.PoolManager(
    cert_reqs='CERT_REQUIRED',
    ca_certs=certifi.where())
r = html.request('GET', url)

#Behandeln Sie HTML mit schöner Suppe
soup = BeautifulSoup(r.data, "html.parser")

#Alle Span-Elemente extrahieren → Alle Span-Elemente werden im Array zurückgegeben →[<span class="m-wficon triDown"></span>, <span class="l-h...
#span Element->Fügen Sie gewöhnliche Sätze wie p- und div-Elemente ein,Der Unterschied besteht darin, dass es keine Zeilenumbrüche gibt
spans = soup.find_all("span")
for tag in spans:
    #Elemente, für die keine Klasse festgelegt ist, sind Tags.get("class").pop(0)Vermeiden Sie den Fehler mit try, da dies zu einem Fehler führt, da dies nicht möglich ist
    try:
        #tag.get("class")Holen Sie sich alle Klassen in Tag und geben Sie sie in einer Liste zurück
        string_ = tag.get("class").pop(0)

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

jtalk.jtalk(str(stockprice)) #Audio mit offenem Gespräch ausgeben
#print(stockprice)

Im Verzeichnis jtalk.py webscraping_jtalk_test.py Wenn Sie dies bestätigen, können Sie Folgendes tun, und es wird Ihnen mitgeteilt.

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

Ich habe es dir gesagt! Aber Sie lesen die Zahlen einfach einzeln. Lol Derzeit denke ich, dass es so weit wie möglich angewendet werden kann.

Zusammenfassung

Dieses Mal habe ich Web Scraping + OpenJtalk ausprobiert! Auf diese Weise können Sie auch die von der API erhaltenen Informationen sprechen. Schreiben Sie ein Programm, damit es morgens zu einer festgelegten Zeit funktioniert, und lassen Sie es das Wetter und die Nachrichten vorlesen, die Sie interessieren. Dann! [Zusatz] Ich habe im folgenden Artikel ein Programm geschrieben, um über das Wetter zu sprechen. Wenn Sie also interessiert sind, tun Sie es bitte! URL: https://qiita.com/coffiego/items/ec050e6106a7424c048b

Recommended Posts

Web-Scraped-Informationen werden mit OpenJtalk als Audio ausgegeben
Abrufen von Eigenschaftsinformationen durch Scraping mit Python
Holen Sie sich Informationen zu Bootsrennen mit Web Scraping
[Python-pptx] Gibt PowerPoint-Schriftinformationen mit Python in CSV aus