Почему файл HTML, который я получил из Google Translate с помощью моего скрипта, отличается от того, что мне действительно нужно? - PullRequest
0 голосов
/ 20 июня 2020

Я хочу создать веб-парсер, который будет автоматически переводить слово из Google Translate в моей консольной среде, используя мой python скрипт.

Я видел этот код HTML из модуля python Requests, сильно отличается от того, что есть на веб-сайте, вы можете увидеть отличия .

После некоторых исследований по этой теме я узнал из этого ответа , что у Google есть некоторые функции безопасности, которые не позволяют мне иметь доступ к его HTML содержимому с помощью моих скриптов.

Но у меня есть chrome расширение ImTranslator, которое может дайте мне перевод любого слова, которое я выбрал на веб-странице, прямо из Google Translate.

Итак, как это расширение может это сделать ?! Почему у меня не может быть скрипта, который сделает это за меня?

Я также пробовал использовать urllib для выполнения запросов и отправки заголовков с моим запросом.

Кроме того, это мой код :

Во-первых, используя модуль urllib:

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
    'Accept-Encoding': 'none',
    'Accept-Language': 'en-US,en;q=0.8',
    'Connection': 'keep-alive'
}
url = 'https://translate.google.com/#view=home&op=translate&sl=en&tl=fa&text=space'
req = urllib.request.Request(url, None, headers)
respone = urllib.request.urlopen(req)

Во-вторых, используя Requests:

url = 'https://translate.google.com/#view=home&op=translate&sl=en&tl=fa&text=space'
res = requests.get(url)

1 Ответ

1 голос
/ 20 июня 2020

Вы можете использовать модуль googletrans на Python для перевода некоторого текста

, но если вы хотите очистить Google Translate, вы можете использовать следующий код

import requests_html
from bs4 import BeautifulSoup as BS

url = "https://translate.google.com/#view=home&op=translate&sl=en&tl=hy&text={}"

text = input("text: ")

with requests_html.HTMLSession() as session:
    response = session.get(url.format(text))
    response.html.render()
    content = response.html.html
    soup = BS(content, "html.parser")
    translation = soup.find("span", "translation").text
    print(translation)

или сделайте это с помощью asyn c way

import asyncio
import pyppeteer
from bs4 import BeautifulSoup as BS

URL = "https://translate.google.com/#view=home&op=translate&sl=en&tl=hy&text={}"

async def main() -> None:
    text = input("text to translate: ")
    browser = await pyppeteer.launch(headless=True)
    page = await browser.newPage()
    await page.goto(URL.format(text))
    html = await page.content()
    soup = BS(html, "html.parser")
    tranlation = soup.find("span", "translation").text
    print(tranlation)
    await browser.close()

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    loop.close()
...