** Voir une conférence qui semble intéressante dans Udemy !! Wow! Il n'y a pas de sous-titres japonais ... ** ~~ Parce qu'étudier l'anglais est gênant ~~ ** Souhaitez-vous le traduire en japonais !!! **
J'ai une certaine capacité à lire et à écrire l'anglais, donc je ne peux pas du tout le lire. Cependant, comme il ne peut pas suivre la vitesse native, il est nécessaire d'arrêter la vidéo une par une et de la traduire d'une main du dictionnaire. Cependant, je ne veux pas faire une telle inefficacité parce que c'est gênant. Alors, traduisons automatiquement les sous-titres actuels en japonais.
De nombreuses vidéos Udemy ont des sous-titres en anglais, et vous pouvez appuyer sur le bouton ci-dessous en bas à droite de la vidéo pour voir tous les sous-titres de cette vidéo. Et les sous-titres de la partie où l'instructeur parle sont surlignés en bleu clair. En d'autres termes, si vous pouvez obtenir ce sous-titre en surbrillance, vous devriez pouvoir le traduire.
Quand j'ai recherché "Python scraping" sur le net, j'ai trouvé qu'il y avait un module appelé Selenium, donc je vais l'utiliser.
Grattage avec Selenium en Python (basique)
En regardant l'article ci-dessus, il semble que vous puissiez obtenir l'élément par id, classe, nom. Je ne suis pas sûr car je n'ai pas fait beaucoup de HTML et de CSS, Si vous connaissez l'identifiant et la classe du sous-titre que vous souhaitez pour le moment, il semble que vous puissiez l'obtenir d'une manière ou d'une autre.
Je suis allé à la page de cours appropriée d'Udemy et j'ai jeté un coup d'œil aux sous-titres mis en évidence dans les outils de développement.
** Sous-titres en surbrillance **
highlight.html
<span data-purpose="cue-text" class="transcript--highlight-cue--1bEgq">Highlight text</span>
** Sous-titres sans surbrillance **
nonhighlight.html
<span data-purpose="cue-text" class="">Non highlight text</span>
Lorsque je l'ai vérifié pendant la lecture de la vidéo, l'intérieur de la classe a changé entre les sous-titres normaux et les sous-titres en surbrillance.
Apparemment, la classe de l'élément en surbrillance est transcript - highlight-cue - 1bEgq
.
J'ai en fait obtenu les sous-titres avec Selenium en utilisant le code suivant.
scraping.py
import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chrome(driver_path)
driver.get(r'https://www.udemy.com/join/login-popup/?next=/home/my-courses/learning/')
last_text = None
while True:
try:
ret = driver.find_element_by_class_name('transcript--highlight-cue--1bEgq')
#0.Puisque les éléments sont acquis à des intervalles de 2 secondes, imprimez uniquement lorsque les éléments sont différents des éléments précédemment acquis.
if ret.text != last_text:
last_text = ret.text
print(last_text)
except NoSuchElementException:
#Si l'élément n'est pas trouvé, une exception se produira, alors serrez-la seulement à ce moment
pass
except Exception as e:
#En cas d'autres exceptions, il se termine pour le moment
print(e)
print('terminer')
exit()
#0.2 secondes sont appropriées
time.sleep(0.2)
Il semble que j'ai pu l'obtenir en toute sécurité, donc pour le moment, ensuite.
En parlant de traduction, ** professeur Google **. Quand je l'ai recherché, il semble que la traduction Google soit possible avec Python.
Traduire en utilisant googletrans en Python
J'ai ajouté le code source en référence à l'article ci-dessus.
translate.py
import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from googletrans import Translator
driver = webdriver.Chrome(driver_path)
driver.get(r'https://www.udemy.com/join/login-popup/?next=/home/my-courses/learning/')
last_text = None
translator = Translator()
while True:
try:
ret = driver.find_element_by_class_name('transcript--highlight-cue--1bEgq')
#0.Puisque les éléments sont acquis à des intervalles de 2 secondes, imprimez uniquement lorsque les éléments sont différents des éléments précédemment acquis.
if ret.text is not None and ret.text != last_text:
last_text = ret.text
print(last_text)
print(translator.translate(last_text, dest='ja').text)
except NoSuchElementException:
#Si l'élément n'est pas trouvé, une exception se produira, alors serrez-la seulement à ce moment
pass
except Exception as e:
#En cas d'autres exceptions, il se termine pour le moment
print(e)
print('terminer')
exit()
#0.2 secondes sont appropriées
time.sleep(0.2)
Pour le moment, j'ai pu le traduire en japonais en temps réel, alors ** Yoshi! ** Vous devez vous connecter à chaque fois que vous exécutez le script, parfois cela se termine par une mystérieuse exception, et le japonais est foiré à cause des mauvais sous-titres anglais en premier lieu, mais c'est moins stressant que de traduire d'une seule main du dictionnaire Je peux le faire, alors je continuerai à l'utiliser.
Recommended Posts