[Python] Ich habe eine App erstellt, die automatisch die Audiodatei jedes Wortes herunterlädt, das für die Englisch-Lern-App verwendet wird.

Zusammenfassung

Für die im folgenden Artikel erstellte Englisch-Lern-App ist eine englische Sprachdatei erforderlich. https://qiita.com/Fuminori_Souma/private/0706716fdebf08572c6c

Das manuelle Herunterladen der Audiodatei ist zeitaufwändig und mühsam Ich habe beschlossen, es automatisch durch Web-Scraping herunterzuladen.

Vielen Dank, dass Sie die Audiodatei von weblio heruntergeladen haben.

Quelldatei

get_sound_file.py


import sys
import tkinter
import time
import re
import urllib.request
from tkinter import messagebox
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

class Frame(tkinter.Frame):

    def __init__(self, master=None):
        tkinter.Frame.__init__(self, master)
        self.master.title('Holen Sie sich die Audiodatei')
        self.master.geometry("400x300")

        #Beschriftungseinstellungen
        text_1 = tkinter.Label(self, text=u'Geben Sie das Wort, für das Sie eine Audiodatei erhalten möchten, in das Textfeld unten ein.')
        text_1.pack(pady='7')
        text_2 = tkinter.Label(self, text=u'* Bei Eingabe mehrerer Wörter ",Bitte trennen Sie sich mit.')
        text_2.pack()

        #Text (mehrere Verse von Einträgen.) Einstellungen von
        self.ent_words = tkinter.Text(self, height=15)
        self.ent_words.pack(padx='30')

        #Druckknopfeinstellungen
        bttn_start = tkinter.Button(self, text = u'Start', command=self.start_get_file)
        bttn_start.bind("<Button-1>") #(Button-2 für Radklick, 3 für Rechtsklick)
        bttn_start.pack(pady='7')

    def checkAlnum(self, word):  #Überprüfen Sie, ob das eingegebene Wort unnötige Symbole usw. enthält.
        alnum = re.compile(r'^[a-zA-Z]+$')  #Kompilieren Sie reguläre Ausdrücke
        result = alnum.match(word) is not None  #SRE, wenn die Bedingungen erfüllt sind_Objekt abgleichen, sonst keine(False)Gib es zurück
        return result

    def delete_symbols(self, word):  #Löschen Sie die in der Zeichenfolge enthaltenen Symbole usw.
        # return word.replace(',', '').replace('.', '').replace('-', '').replace(' ', '')
        return word.replace(',', '').replace(' ', '')

    def get_mp3(self, word, driver):  #Öffnen Sie die Weblio-Seite und holen Sie sich die MP3-Datei

        dir = 'C:/Users/fumin/OneDrive'  #Download-Ziel für Audiodateien

        #Geben Sie ein Wort in das Textfeld für die Wortsuche ein und drücken Sie die Suchtaste
        driver.find_element_by_xpath("//*[@id=\"searchWord\"]").clear()  #Textfeld initialisieren
        driver.find_element_by_xpath("//*[@id=\"searchWord\"]").send_keys(word)
        driver.find_element_by_xpath("//*[@id=\"headFixBxTR\"]/input").click()
        time.sleep(5)

        #Audiodatei existiert (=Wenn "Player-Wiedergabe" vorhanden ist)
        if not driver.find_elements_by_xpath("//*[@id=\"audioDownloadPlayUrl\"]/i") == []:

            #Drücken Sie "Player abspielen", um die MP3-Datei in einem neuen Fenster zu öffnen
            driver.find_element_by_xpath("//*[@id=\"audioDownloadPlayUrl\"]/i").click()
            time.sleep(5)

            #Ändern Sie das Zielfenster in eine neu geöffnete MP3-Datei
            handles = driver.window_handles
            driver.switch_to.window(handles[1])

            #MP3-Datei herunterladen
            urllib.request.urlretrieve(driver.current_url, (dir + '/' + word + '.mp3'))
            driver.close()

            #Setzen Sie das Zielfenster auf das ursprüngliche Fenster zurück
            driver.switch_to.window(handles[0])

            return 'OK'

        else:  #Audiodatei existiert nicht (=Wenn "Player-Wiedergabe" nicht vorhanden ist)

            return 'NG'


    def start_get_file(self):

        reslist = {}  #Gibt an, ob eine Wort-Audiodatei vorhanden ist (initialisiert mit einem leeren Wörterbuchtyp)

        words = self.ent_words.get('1.0', 'end')  #Holen Sie sich die Wortliste in das Textfeld eingegeben

        if self.checkAlnum(self.delete_symbols(words)):  #Richtig eingegeben (alphabetische Zeichen und ",Wenn etwas anderes als "nicht eingegeben wird)

            ww = [x.strip() for x in words.split(',')]  #Speichern Sie die Eingabewortliste als durch Kommas getrennten Listentyp

            #Browser öffnen
            drv = webdriver.Chrome("C:/Users/fumin/pybraries/chromedriver_ver79/chromedriver")
            time.sleep(10)

            #Öffnen Sie die Seite (Weblio), um zu arbeiten
            drv.get("https://ejje.weblio.jp/")
            time.sleep(10)

            j = 0  #NG Wort(Wörter, für die die MP3-Datei nicht existiert)Anzahl der

            for i in range(len(ww)):  #Holen Sie sich MP3-Datei
                reslist[ww[i]] = self.get_mp3(ww[i], drv)

                if reslist[ww[i]] == 'NG':  #Fügen Sie der NG-Liste Wörter hinzu, die keine MP3-Datei haben

                    j += 1  #Fügen Sie die Anzahl der NG-Wörter hinzu

                    if j <= 1:  #Das erste NG-Wort wird als Zeichenkettentyp gespeichert
                        nglist = ww[i]

                    elif j == 2:  #Das zweite NG-Wort wird in einen Listentyp konvertiert, indem es mit dem ersten durch Komma getrennten Wort verbunden wird.
                        nglist = (nglist + ',' + ww[i]).split(',')

                    else:  #Die dritte und die folgenden werden nacheinander zum Listentyp hinzugefügt
                        nglist.append(ww[i])

            drv.close()  #Schließen Sie den Browser, wenn der Worterfassungsprozess abgeschlossen ist

            if 'nglist' in locals():  #Wenn es ein Wort gibt, für das die Audiodatei nicht vorhanden war

                if j == 1:  #Wenn es nur ein NG-Wort gibt
                    messagebox.showinfo('', 'Ich habe die Audiodateien aller Wörter mit Ausnahme der folgenden heruntergeladen.\n\n' + nglist)
                else:  #Wenn es zwei oder mehr NG-Wörter gibt
                    messagebox.showinfo('', 'Ich habe die Audiodateien aller Wörter mit Ausnahme der folgenden heruntergeladen.\n\n' + ', '.join(nglist))
            else:
                messagebox.showinfo('', 'Ich habe die Audiodatei aller eingegebenen Wörter heruntergeladen.')

        else:   #Nicht richtig eingegeben (alphabetische Zeichen und "",Wenn etwas anderes als "eingegeben wird)
            messagebox.showinfo('', 'Alphabet und ",Wird eingegeben. Bitte versuchen Sie es nach dem Löschen erneut.')


if __name__ == '__main__':

    #Rahmeneinstellungen
    root = Frame()
    root.pack()
    root.mainloop()

Bemerkungen

Es ist nicht gut, die Weblio-Site zu belasten, deshalb habe ich sie erheblich verlangsamt. .. aus diesem Grund, Die Download-Geschwindigkeit unterscheidet sich nicht wesentlich von der manuellen. (Ich denke, es ist sinnvoll zu automatisieren, nicht Geschwindigkeit)

Aufgabe

  1. Wenn ich eine MP3-Datei öffne, wird die Audiodatei jedes Mal abgespielt. .. aus diesem Grund, Der Sound der MP3-Datei wurde nur bei der Wiedergabe so angepasst, dass der Sound nicht abgespielt wird. .. Aber von der MP3-Datei Ich konnte die Lautstärkeleiste nicht einstellen. Ich dachte darüber nach, die Lautstärke des PCs selbst für einen Moment auf 0 zu stellen, aber während ich Musik hörte Wenn Sie es heruntergeladen haben, wird auch die Musik abgeschnitten! Dachte ich und gab auf, ohne anzuhalten.

  2. Um die MP3-Datei herunterzuladen, klicken Sie zunächst mit der rechten Maustaste auf> Audio speichern unter Ich habe überlegt auszuwählen, aber das Kontextmenü, das durch Klicken mit der rechten Maustaste angezeigt wurde, befindet sich in Selen Es scheint unzugänglich. .. Also habe ich urllib verwendet, um die MP3-Datei herunterzuladen. Ich bin froh, dass ich die MP3-Datei herunterladen konnte, aber wenn ich in Zukunft mit der rechten Maustaste klicken muss Ich bin in Schwierigkeiten. ..

Andere Informationen, die als Referenz verwendet wurden

Vielen Dank für all die Hilfe, die Sie mir gegeben haben. Vielen Dank.

Inhalt Linkziel
So laden Sie Dateien herunter https://stackoverflow.com/questions/48736437/how-to-download-this-video-using-selenium
Bestätigung der Elementexistenz https://ja.stackoverflow.com/questions/30895/xpath%E3%81%A7%E8%A6%81%E7%B4%A0%E3%81%AE%E5%AD%98%E5%9C%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
Über Rechtsklick auf Selen https://stackoverflow.com/questions/20316864/how-to-perform-right-click-using-selenium-chromedriver

Schließlich

Ich liege hier falsch! Nicht hier! Das solltest du hier machen! Wenn Sie irgendwelche Fragen haben, Ich würde mich freuen, Tränen zu vergießen, wenn Sie darauf hinweisen könnten.

Recommended Posts

[Python] Ich habe eine App erstellt, die automatisch die Audiodatei jedes Wortes herunterlädt, das für die Englisch-Lern-App verwendet wird.
[Python] Ich habe eine App erstellt, um die feine Sprachunterscheidung von englischen Wörtern zu üben.
Ändern Sie automatisch die Größe von Screenshots für den App Store für jeden Bildschirm in Python
Erstellen Sie eine englische Wort-App mit Python
Ich habe ein Skript erstellt, um zu überprüfen, ob an der angegebenen Position der JSON-Datei in Python Englisch eingegeben wird.
Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.
Ich habe in Python ein Tool erstellt, das mit der rechten Maustaste auf eine Excel-Datei klickt und diese für jedes Blatt in Dateien unterteilt.
Geben Sie für jede Datei die angegebene Tabelle der Oracle-Datenbank in Python in Excel aus
Python-Programm, das nach demselben Dateinamen sucht
Analysieren Sie die Researchmap-API mit Python und erstellen Sie automatisch eine Word-Datei für die Leistungsliste
Überprüfen Sie die Funktionsweise von Python für .NET in jeder Umgebung
Berücksichtigung von Python-Dekoratoren des Typs, der Variablen übergibt
Verschiedene Hinweise zur Verwendung von Python für Projekte
Google sucht mit Python nach der Zeichenfolge in der letzten Zeile der Datei
Ich habe die X-Means-Methode untersucht, mit der die Anzahl der Cluster automatisch geschätzt wird
Erstellen Sie eine App, die LINE jeden Morgen über das Wetter informiert
Python Hinweis: Map - Machen Sie dasselbe für jedes Element der Liste
Ich hatte Python satt und analysierte die Daten mit Nehan (Corona verwandt, ist das Wort jetzt?)
[Basic Information Engineer Examination] Ich habe einen Algorithmus für den Maximalwert eines Arrays in Python geschrieben.
[Für Anfänger] Ich möchte den Index eines Elements erhalten, das einen bestimmten bedingten Ausdruck erfüllt
(Python) Ich habe eine App von Trello erstellt, die regelmäßig über das Auslaufen von Aufgaben informiert, die bald ablaufen.