** Sehen Sie sich einen Vortrag an, der in Udemy interessant aussieht !! Wow! Es gibt keine japanischen Untertitel ... ** ~~ Weil Englisch lernen mühsam ist ~~ ** Möchten Sie es ins Japanische übersetzen !!! **
Ich kann Englisch lesen und schreiben, daher kann ich es nicht lesen. Da es jedoch nicht mit der nativen Geschwindigkeit mithalten kann, muss das Video einzeln angehalten und mit einer Hand des Wörterbuchs übersetzt werden. Ich möchte diese Ineffizienz jedoch nicht tun, da sie problematisch ist. Lassen Sie uns also die aktuellen Untertitel automatisch ins Japanische übersetzen.
Viele Udemy-Videos haben englische Untertitel. Sie können auf die Schaltfläche unten rechts im Video klicken, um alle Untertitel für dieses Video anzuzeigen. Die Untertitel des Teils, in dem der Kursleiter spricht, werden hellblau hervorgehoben. Mit anderen Worten, wenn Sie diesen hervorgehobenen Untertitel erhalten können, sollten Sie ihn übersetzen können.
Als ich im Internet nach "Python Scraping" suchte, stellte ich fest, dass es ein Modul namens Selenium gab, also werde ich es verwenden.
Scraping mit Selen in Python (Basic)
Wenn Sie sich den obigen Artikel ansehen, scheint es, dass Sie das Element nach ID, Klasse, Name erhalten können. Ich bin mir nicht sicher, weil ich nicht viel HTML und CSS gemacht habe. Wenn Sie die ID und Klasse des Untertitels kennen, den Sie vorerst möchten, können Sie ihn anscheinend irgendwie bekommen.
Ich ging zur entsprechenden Kursseite von Udemy und sah mir die Untertitel an, die in den Entwicklertools hervorgehoben wurden.
** Hervorgehobene Untertitel **
highlight.html
<span data-purpose="cue-text" class="transcript--highlight-cue--1bEgq">Highlight text</span>
** Untertitel ohne Highlights **
nonhighlight.html
<span data-purpose="cue-text" class="">Non highlight text</span>
Als ich es während der Wiedergabe des Videos überprüfte, wechselte das Innere der Klasse zwischen normalen Untertiteln und hervorgehobenen Untertiteln. Anscheinend ist die Klasse des hervorgehobenen Elements "Transkript - Highlight-Cue - 1bEgq".
Ich habe die Untertitel mit Selenium tatsächlich mit dem folgenden Code erhalten.
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.Da die Elemente in Intervallen von 2 Sekunden erfasst werden, wird nur gedruckt, wenn sich die Elemente von den zuvor erfassten Elementen unterscheiden.
if ret.text != last_text:
last_text = ret.text
print(last_text)
except NoSuchElementException:
#Wenn das Element nicht gefunden wird, tritt eine Ausnahme auf. Drücken Sie es daher nur zu diesem Zeitpunkt
pass
except Exception as e:
#Bei anderen Ausnahmen endet es vorerst
print(e)
print('Fertig')
exit()
#0.2 Sekunden sind angemessen
time.sleep(0.2)
Es scheint, dass ich es sicher bekommen konnte, also vorerst als nächstes.
Apropos Übersetzung, ** Google Lehrer **. Als ich es nachgeschlagen habe, scheint es, dass Google-Übersetzung mit Python möglich ist.
Mit googletrans in Python übersetzen
Ich habe den Quellcode unter Bezugnahme auf den obigen Artikel hinzugefügt.
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.Da die Elemente in Intervallen von 2 Sekunden erfasst werden, wird nur gedruckt, wenn sich die Elemente von den zuvor erfassten Elementen unterscheiden.
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:
#Wenn das Element nicht gefunden wird, tritt eine Ausnahme auf. Drücken Sie es daher nur zu diesem Zeitpunkt
pass
except Exception as e:
#Bei anderen Ausnahmen endet es vorerst
print(e)
print('Fertig')
exit()
#0.2 Sekunden sind angemessen
time.sleep(0.2)
Vorläufig konnte ich es in Echtzeit ins Japanische übersetzen, also ** Yoshi! ** Sie müssen sich jedes Mal anmelden, wenn Sie das Skript ausführen. Manchmal endet es mit einer mysteriösen Ausnahme, und die Japaner sind aufgrund der falschen englischen Untertitel in erster Linie durcheinander, aber es ist weniger stressig als das Übersetzen mit einer Hand des Wörterbuchs Ich kann es tun, also werde ich es weiter benutzen.
Recommended Posts