使用googletrans翻译DataFrame课程标题失败,返回translatex0000求助
解决googletrans翻译DataFrame返回translatex0000的问题
问题根源
- 库使用逻辑错误:你直接调用
translate.Translator()类构造函数,返回的是Translator对象的内存引用(即你看到的类似translatex0000的内容),而非翻译后的文本结果。 - 库导入混淆:你导入的
google_trans不是官方googletrans库,属于安装或导入环节的错误。 - 未实例化翻译对象:代码中注释掉了翻译实例的创建语句,但实际使用时未补全,直接调用类导致无效输出。
修正步骤
1. 安装正确的googletrans库
先卸载错误依赖,安装官方稳定版本:
pip uninstall google_trans translate pip install googletrans==4.0.0-rc1
2. 修正翻译核心逻辑
修改后的关键代码片段:
# 导入官方googletrans库的Translator from googletrans import Translator # 实例化翻译器对象 translator = Translator() # 调用translate方法并提取text属性获取翻译结果 df['Title (hin)'] = df['Title (eng)'].apply(lambda x: translator.translate(x, dest='hi').text)
3. 完整修正后的代码
from googletrans import Translator from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions import pandas as pd import time chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') chrome_options.add_argument("window-size=1920,1080") driver = webdriver.Chrome(options=chrome_options) url = "https://www.classcentral.com/collection/top-free-online-courses" driver.get(url) try: while True: WebDriverWait(driver, 1).until( expected_conditions.element_to_be_clickable((By.XPATH, "//button[@data-name='LOAD_MORE']")) ).click() time.sleep(0.5) except Exception as e: pass all_courses = driver.find_element(by=By.CLASS_NAME, value='catalog-grid__results') courses = all_courses.find_elements(by=By.CSS_SELECTOR, value='[class="color-charcoal course-name"]') df = pd.DataFrame([[course.text, course.get_attribute('href')] for course in courses], columns=['Title (eng)', 'Link']) # 初始化翻译器并执行翻译 translator = Translator() df['Title (hin)'] = df['Title (eng)'].apply(lambda x: translator.translate(x, dest='hi').text) print(df) driver.quit() # 关闭浏览器释放资源
额外注意事项
- 请求频率限制:Google翻译有请求频次限制,若课程数量较多,建议在翻译时加入延迟避免被封禁:
df['Title (hin)'] = df['Title (eng)'].apply(lambda x: translator.translate(x, dest='hi').text if time.sleep(0.5) is None else None) - 代理设置:若遇到访问被限制,可给Translator配置代理:
translator = Translator(proxies={'http': 'http://your-proxy:port', 'https': 'https://your-proxy:port'})
内容的提问来源于stack exchange,提问作者teddy107 Van Weit
相关产品推荐
相关产品推荐

