L'application d'étude d'anglais créée dans l'article ci-dessous nécessite un fichier vocal en anglais. https://qiita.com/Fuminori_Souma/private/0706716fdebf08572c6c
Le téléchargement manuel du fichier audio prend du temps et est laborieux, donc J'ai décidé de le télécharger automatiquement par web scraping.
Merci d'avoir téléchargé le fichier audio de weblio.
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('Obtenez le fichier audio')
self.master.geometry("400x300")
#Paramètres d'étiquette
text_1 = tkinter.Label(self, text=u'Entrez le mot pour lequel vous souhaitez obtenir un fichier audio dans la zone de texte ci-dessous.')
text_1.pack(pady='7')
text_2 = tkinter.Label(self, text=u'* Lors de la saisie de plusieurs mots, ",Veuillez séparer avec.')
text_2.pack()
#Texte (plusieurs vers d'entrées.) paramètres de
self.ent_words = tkinter.Text(self, height=15)
self.ent_words.pack(padx='30')
#Paramètres du bouton poussoir
bttn_start = tkinter.Button(self, text = u'début', command=self.start_get_file)
bttn_start.bind("<Button-1>") #(Button-2 pour le clic de roue, 3 pour le clic droit)
bttn_start.pack(pady='7')
def checkAlnum(self, word): #Vérifiez si le mot saisi contient des symboles inutiles, etc.
alnum = re.compile(r'^[a-zA-Z]+$') #Compiler des expressions régulières
result = alnum.match(word) is not None #SRE si les conditions sont remplies avec match_Match object, sinon Aucun(False)rends le
return result
def delete_symbols(self, word): #Supprimer les symboles, etc. inclus dans la chaîne de caractères
# return word.replace(',', '').replace('.', '').replace('-', '').replace(' ', '')
return word.replace(',', '').replace(' ', '')
def get_mp3(self, word, driver): #Ouvrez la page weblio et récupérez le fichier mp3
dir = 'C:/Users/fumin/OneDrive' #Destination de téléchargement du fichier audio
#Entrez un mot dans la zone de texte pour la recherche de mots et appuyez sur le bouton de recherche
driver.find_element_by_xpath("//*[@id=\"searchWord\"]").clear() #Initialiser la zone de texte
driver.find_element_by_xpath("//*[@id=\"searchWord\"]").send_keys(word)
driver.find_element_by_xpath("//*[@id=\"headFixBxTR\"]/input").click()
time.sleep(5)
#Le fichier audio existe (=Si "lecture du lecteur" existe)
if not driver.find_elements_by_xpath("//*[@id=\"audioDownloadPlayUrl\"]/i") == []:
#Appuyez sur "Play Player" pour ouvrir le fichier mp3 dans une nouvelle fenêtre
driver.find_element_by_xpath("//*[@id=\"audioDownloadPlayUrl\"]/i").click()
time.sleep(5)
#Changer la fenêtre cible en un fichier mp3 nouvellement ouvert
handles = driver.window_handles
driver.switch_to.window(handles[1])
#Télécharger le fichier mp3
urllib.request.urlretrieve(driver.current_url, (dir + '/' + word + '.mp3'))
driver.close()
#Ramène la fenêtre cible à la fenêtre d'origine
driver.switch_to.window(handles[0])
return 'OK'
else: #Le fichier audio n'existe pas (=Si la "lecture du lecteur" n'existe pas)
return 'NG'
def start_get_file(self):
reslist = {} #Si un fichier audio Word existe (initialisé avec un type de dictionnaire vide)
words = self.ent_words.get('1.0', 'end') #Obtenez la liste de mots entrée dans la zone de texte
if self.checkAlnum(self.delete_symbols(words)): #Entré correctement (caractères alphabétiques et "",Si rien d'autre que "n'est entré)
ww = [x.strip() for x in words.split(',')] #Stocker la liste de mots d'entrée sous forme de liste séparée par des virgules
#Navigateur ouvert
drv = webdriver.Chrome("C:/Users/fumin/pybraries/chromedriver_ver79/chromedriver")
time.sleep(10)
#Ouvrez la page (weblio) pour opérer
drv.get("https://ejje.weblio.jp/")
time.sleep(10)
j = 0 #Mot NG(Mots pour lesquels le fichier mp3 n'existe pas)Nombre de
for i in range(len(ww)): #Obtenir un fichier mp3
reslist[ww[i]] = self.get_mp3(ww[i], drv)
if reslist[ww[i]] == 'NG': #Ajouter des mots qui n'ont pas de fichier mp3 à la liste NG
j += 1 #Ajouter le nombre de mots NG
if j <= 1: #Le premier mot NG est stocké sous forme de chaîne de caractères
nglist = ww[i]
elif j == 2: #Le deuxième mot NG est converti en un type de liste en le reliant au premier séparé par une virgule.
nglist = (nglist + ',' + ww[i]).split(',')
else: #Le troisième et les suivants sont ajoutés au type de liste dans l'ordre
nglist.append(ww[i])
drv.close() #Fermez le navigateur lorsque le processus d'acquisition de mots est terminé
if 'nglist' in locals(): #S'il y a un mot pour lequel le fichier audio n'existait pas
if j == 1: #Lorsqu'il n'y a qu'un seul mot NG
messagebox.showinfo('', 'J'ai téléchargé les fichiers audio de tous les mots sauf le suivant.\n\n' + nglist)
else: #Lorsqu'il y a deux mots NG ou plus
messagebox.showinfo('', 'J'ai téléchargé les fichiers audio de tous les mots sauf le suivant.\n\n' + ', '.join(nglist))
else:
messagebox.showinfo('', 'J'ai téléchargé le fichier audio de tous les mots saisis.')
else: #Non saisi correctement (caractères alphabétiques et "",Si quelque chose autre que "est entré)
messagebox.showinfo('', 'Alphabet et ",Est saisi. Veuillez réessayer après l'avoir supprimé.')
if __name__ == '__main__':
#Paramètres du cadre
root = Frame()
root.pack()
root.mainloop()
Ce n'est pas bon de mettre un fardeau sur le site weblio, alors je l'ai considérablement ralenti. .. pour cette raison, La vitesse de téléchargement n'est pas très différente du manuel. (Je pense qu'il est important d'automatiser, pas d'accélérer)
Lorsque j'ouvre un fichier mp3, le fichier audio est lu à chaque fois. .. pour cette raison, Ajustement du son du fichier mp3 uniquement lors de sa lecture afin que le son ne soit pas lu. .. Mais du fichier mp3 Je n'ai pas pu régler la barre de volume. J'ai pensé à régler le volume du PC lui-même à 0 pendant un moment, mais en écoutant de la musique Si vous l'avez téléchargé, la musique sera également coupée! J'ai pensé, et j'ai abandonné sans m'arrêter.
Pour savoir comment télécharger le fichier mp3, faites d'abord un clic droit -> Enregistrer l'audio sous Je pensais à sélectionner, mais le menu contextuel qui est sorti en faisant un clic droit est dans Selenium Cela semble inaccessible. .. J'ai donc utilisé urllib pour télécharger le fichier mp3. Je suis content d'avoir pu télécharger le fichier mp3 en conséquence, mais lorsque j'ai besoin de faire un clic droit à l'avenir J'ai des problèmes. ..
Merci pour toute l'aide que vous m'avez apportée. Merci beaucoup.
Contenu | Lier la destination |
---|---|
Comment télécharger des fichiers | https://stackoverflow.com/questions/48736437/how-to-download-this-video-using-selenium |
Confirmation de l'existence de l'élément | 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 |
À propos du clic droit sur Selenium | https://stackoverflow.com/questions/20316864/how-to-perform-right-click-using-selenium-chromedriver |
Je me trompe ici! Pas ici! Vous devriez le faire ici! Si vous avez des questions, Je serais ravi de verser des larmes si vous pouviez le signaler.
Recommended Posts