#python #beautifulsoup #tags #lxml
Вопрос:
Я использую библиотеку lxml и beautifulsoup, на самом деле моя цель-перевести текст определенных тегов из всего html-кода, я хочу заменить текст определенных тегов переведенным текстом.
Я хочу установить цикл для конкретного xpath, в который все переведенные тексты должны вставляться один за другим. И html-код должен быть возвращен вместе с переведенной версией.
from bs4 import BeautifulSoup, NavigableString, Tag
import requests
import time
import pandas as pd
import translators as ts
import json
import numpy as np
import regex
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from lxml import html
import time
import lxml.html
#r=requests.get(input('Enter the URL of your HTML page:n'))
r=requests.get('https://neculaifantanaru.com/en/qualities-of-a-leader-inner-integrity.html')
soup=BeautifulSoup(r.text, 'html.parser')
page=r.content
element = html.fromstring(page)
try:
articles=[]
for item in element.xpath('//*[@id="incadrare_text_mijloc_2"]/div[1]//p[@class = "text_obisnuit"]'):
texts=item.text_content()
#texts=texts.split('"',100)
#articles.append(item.text_content())
articles.append(texts)
translated_articles=[]
for text in articles:
print(text)
output=ts.google(text, from_language='en', to_language='ro')
translated_articles.append(output)
for i,z in zip(translated_articles,soup.find_all('p', attrs={'class':'text_obisnuit'})):
var=z.string
var.replace_with(var.replace(var, i))
#print(soup)
except Exception as e:
print(e)
Я не получаю весь текст из этого xpath.
element.xpath('//*[@id="incadrare_text_mijloc_2"]/div[1]//p[@class = "text_obisnuit"]')
Результат, который я получаю:
Everything in Kevin Lomax's life changed after he was recruited by the most powerful law firm in the world, "Milton, Chadwick amp; Waters". Despite the fact that his mother was not agree, he accepted to provide his services of a professional lawyer to this company headed by none other than John Milton, a very powerful man with a very strange personality, which has aroused some suspicion since their first meeting.
If you saw the movie "The Devil's Advocate (1997)", perhaps you remember the end. Milton proposes to Kevin to take over his company, promising that he will have everything in the world, but with a single price - to sell his soul. But Kevin was hiding virtues that Milton did not believe that he has them.
AttributeError: 'NoneType' object has no attribute 'replace_with'
Я хочу извлечь весь текст тега p «класс атрибутов=obisnuit», используя приведенный выше xpath, а затем перевести его с помощью библиотеки переводчиков
и хочу вернуть весь html-код с переведенным текстом между тегом p класса атрибутов=obisnuit.
###ПРИМЕЧАНИЕ:###
Должен быть цикл для вставки переведенного текста во все эти теги, я имею в виду, что все теги должны получать свой собственный текст после перевода с помощью цикла.
Я не могу объяснить больше, кто-нибудь, направьте меня, пожалуйста.
Ответ №1:
вам нужна замена? Не можете ли вы просто установить строку/contnet для перевода?
Кроме того, вы как бы выполняете здесь некоторые ненужные циклы. И вам нужно будет исправить свой отступ, так как вы хотите, чтобы он был for i,z
на 2 уровня выше.
попробуйте это:
r=requests.get('https://neculaifantanaru.com/en/qualities-of-a-leader-inner-integrity.html')
soup=BeautifulSoup(r.text, 'html.parser')
try:
articles = soup.find_all('p', {'class':"text_obisnuit"})
for item in articles:
original_text=item.text
#print(original_text)
translated_output=ts.google(original_text, from_language='en', to_language='ro')
print(item)
item.string = translated_output
except Exception as e:
print(e)
# To see that it was changed
for item in articles:
print(item)
translated_html = str(soup)
Комментарии:
1. Привет, спасибо за помощь, но дело в том, что мне нужна вся переведенная html-страница, а не только теги obisnuit. и вы скажете мне, как я могу это сделать?
2. ты просто храни это.
translated_html = str(soup)
. Или запишите html в файл или что-то еще. Все эти элементы изменяются на всей html-странице3. кстати, какую версию переводчиков вы используете? Я продолжаю получать ошибку с этим.
4. Я использую простую библиотеку » переводчики «, установите ее pip как «pip install translators». И я понял, что весь html возвращается с переведенной версией, спасибо, я просто использовал печать(суп), чтобы подтвердить, возвращается ли он с переведенной версией,