Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Explanation here:
- Romanian: https://neculaifantanaru.com/regex-python-translate-beautifulsoup-googletrans-html-tags-contains-keywords.html
- English: https://neculaifantanaru.com/en/regex-python-translate-beautifulsoup-googletrans-html-tags-contains-keywords.html
- from bs4 import BeautifulSoup
- from bs4.formatter import HTMLFormatter
- from googletrans import Translator
- import requests
- import re
- translator = Translator()
- class UnsortedAttributes(HTMLFormatter):
- def attributes(self, tag):
- for k, v in tag.attrs.items():
- yield k, v
- files_from_folder = r"c:\Users\Castel\Videos\Captures"
- use_translate_folder = False
- destination_language = 'nl'
- extension_file = ".html"
- pattern1 = r'<p class="text_obisnuit">.*(( the | you | which | have | had | then | that | must | make | from | else | does | get | will | make | made | yours | can | your | doesn | their | could | from | at | of | my | an | by | with | are | his | him | she | he | it | may | seem | and | for | else | while | which | be | these | let | ask | has | as | won | keep | but | everything | without | thinking | about | just | to | doesn | if | each | try | I’m | them | one | more | much | on | all | even | over | seems ).*){3,}.*</p>'
- pattern2 = r'<p class="text_obisnuit2">.*(( the | you | which | have | had | then | that | must | make | from | else | does | get | will | make | made | yours | can | your | doesn | their | could | from | at | of | my | an | by | with | are | his | him | she | he | it | may | seem | and | for | else | while | which | be | these | let | ask | has | as | won | keep | but | everything | without | thinking | about | just | to | doesn | if | each | try | I’m | them | one | more | much | on | all | even | over | seems ).*){3,}.*</p>'
- pattern3 = r'<title>.*(( the | you | which | have | had | then | that | must | make | from | else | does | get | will | make | made | yours | can | your | doesn | their | could | from | at | of | my | an | by | with | are | his | him | she | he | it | may | seem | and | for | else | while | which | be | these | let | ask | has | as | won | keep | but | everything | without | thinking | about | just | to | doesn | if | each | try | I’m | them | one | more | much | on | all | even | over | seems ).*){3,}.*</title>'
- pattern4 = r'<meta name="description" content=.*(( the | you | which | have | had | then | that | must | make | from | else | does | get | will | make | made | yours | can | your | doesn | their | could | from | at | of | my | an | by | with | are | his | him | she | he | it | may | seem | and | for | else | while | which | be | these | let | ask | has | as | won | keep | but | everything | without | thinking | about | just | to | doesn | if | each | try | I’m | them | one | more | much | on | all | even | over | seems ).*){3,}.*>'
- patterns = [pattern1, pattern2, pattern3, pattern4]
- import os
- directory = os.fsencode(files_from_folder)
- def recursively_translate(node):
- for x in range(len(node.contents)):
- if isinstance(node.contents[x], str):
- if node.contents[x].strip() != '':
- try:
- translation = translator.translate(node.contents[x], dest=destination_language).text
- node.contents[x].replaceWith(translation)
- except Exception as e:
- print(e)
- elif node.contents[x] != None:
- recursively_translate(node.contents[x])
- for file in os.listdir(directory):
- filename = os.fsdecode(file)
- print(filename)
- if filename == 'y_key_e479323ce281e459.html' or filename == 'TS_4fg4_tr78.html':
- continue
- if filename.endswith(extension_file):
- with open(os.path.join(files_from_folder, filename), encoding='utf-8') as html:
- page = html.read()
- updated = False
- for pattern in patterns:
- for x in re.finditer(pattern, page):
- updated = True
- new = x.group(0)
- soup = BeautifulSoup(new, 'html.parser')
- if pattern != pattern4:
- recursively_translate(soup)
- else:
- meta = soup.find('meta')
- meta['content'] = translator.translate(meta['content'], dest=destination_language).text
- soup = soup.encode(formatter=UnsortedAttributes()).decode('utf-8')
- page = page.replace(new, soup)
- if updated:
- print(f'{filename} translated')
- new_filename = f'{filename.split(".")[0]}_{destination_language}.html'
- if use_translate_folder:
- try:
- with open(os.path.join(files_from_folder+r'\translated', new_filename), 'w', encoding='utf-8') as new_html:
- new_html.write(page)
- except:
- os.mkdir(files_from_folder+r'\translated')
- with open(os.path.join(files_from_folder+r'\translated', new_filename), 'w', encoding='utf-8') as new_html:
- new_html.write(page)
- else:
- with open(os.path.join(files_from_folder, new_filename), 'w', encoding='utf-8') as html:
- html.write(page)
Add Comment
Please, Sign In to add comment