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.
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()
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)
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.
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. ..
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 |
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