You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用googletrans与Pandas的Python爬虫脚本运行失败求助

问题:爬取课程标题并翻译的Python脚本运行失败

终端报错信息

文件 "C:\Users\Zux\PycharmProjects\ClassCentral\ClassCentral\Lib\site-packages\googletrans\client.py",第182行,translate函数中:
data = self._translate(text, dest, src, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
文件 "C:\Users\Zux\PycharmProjects\ClassCentral\ClassCentral\Lib\site-packages\googletrans\client.py",第78行,_translate函数中:
token = self.token_acquirer.do(text)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
文件 "C:\Users\Zux\PycharmProjects\ClassCentral\ClassCentral\Lib\site-packages\googletrans\gtoken.py",第194行,do函数中:
self._update()
文件 "C:\Users\Zux\PycharmProjects\ClassCentral\ClassCentral\Lib\site-packages\googletrans\gtoken.py",第62行,_update函数中:
code = self.RE_TKK.search(r.text).group(1).replace('var ', '')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'group'

脚本代码实现

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 urllib.request as urllib2
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)

translator = Translator()

try:
    while True:
        # wait until button is clickable
        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'])

df['Title (hin)'] = df['Title (eng)'].apply(lambda x: translator.translate(x, dest='hi').text)

print(df)

解决方法

该错误源于googletrans官方库的token获取机制失效——谷歌翻译反爬策略更新后,旧版库无法正确生成请求token。以下是三种可行解决方案:

1. 安装维护中的googletrans分支版本

卸载当前版本,安装第三方维护的修复版本:

pip uninstall googletrans -y
pip install googletrans==4.0.0-rc1

替换后无需修改原有翻译代码即可正常运行。

2. 改用translate库替代

若上述版本仍有问题,可切换至translate库:
先安装依赖:

pip install translate

再修改翻译部分代码:

from translate import Translator

# 替换原有翻译相关代码
translator = Translator(to_lang="hi")
df['Title (hin)'] = df['Title (eng)'].apply(lambda x: translator.translate(x))

3. 用Selenium模拟谷歌翻译页面

依赖已有的Selenium环境,直接模拟人工翻译操作,无API限制问题:

# 替换原有翻译部分代码
def translate_text(text):
    driver.get(f"https://translate.google.com/?sl=en&tl=hi&text={text}&op=translate")
    # 等待翻译结果加载完成
    WebDriverWait(driver, 3).until(
        expected_conditions.presence_of_element_located((By.CSS_SELECTOR, 'span[class="JLqJ4b ChMk0b"]'))
    )
    result = driver.find_element(By.CSS_SELECTOR, 'span[class="JLqJ4b ChMk0b"]').text
    return result

df['Title (hin)'] = df['Title (eng)'].apply(translate_text)

此方法速度稍慢,但不会受token失效影响。

内容的提问来源于stack exchange,提问作者Sandra Jackson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:42:57