如何用Python BeautifulSoup删除子元素及谷歌翻译原文?
2. 删除谷歌翻译原文无效的问题解决
谷歌翻译的页面结构是动态生成的,class名经常带随机后缀,这很可能是你代码无效的原因。我先模拟常见的谷歌翻译HTML结构,给你正确的处理方案:
第一步:分析谷歌翻译的HTML结构(典型示例)
谷歌翻译的原文通常嵌套在类似这样的容器里:
<div class="gt-c gt-c-mk gt-c-mk-en"> <div class="gt-src-wrap gt-src-wrap-ptr"> <span class="gt-src">Hello World</span> </div> <div class="gt-res-wrap"> <span class="gt-res">你好世界</span> </div> </div>
注意这里的gt-src-wrap后面可能带随机后缀gt-src-wrap-ptr,直接用完整class名匹配会失败。
第二步:正确的删除代码
用lambda函数做部分class匹配,就能避开动态后缀的问题:
from bs4 import BeautifulSoup # 模拟从谷歌翻译页面获取的HTML page_html = """ <div class="gt-c gt-c-mk gt-c-mk-en"> <div class="gt-src-wrap gt-src-wrap-ptr"> <span class="gt-src">Hello World</span> </div> <div class="gt-res-wrap"> <span class="gt-res">你好世界</span> </div> </div> """ soup = BeautifulSoup(page_html, 'html.parser') # 定位原文容器(匹配包含gt-src-wrap的class) original_container = soup.find('div', class_=lambda x: x and 'gt-src-wrap' in x) if original_container: original_container.decompose() # 删除整个原文容器 # 或者直接定位原文文本标签 original_text = soup.find('span', class_=lambda x: x and 'gt-src' in x) if original_text: original_text.decompose() print(soup.prettify())
可能的其他问题排查
如果还是无效,大概率是你获取的HTML里还没加载出原文元素:
- 如果你用爬虫直接请求页面,谷歌翻译的内容是JS动态渲染的,静态请求拿不到完整HTML,这时候需要用Selenium等工具模拟浏览器加载页面
- 用Selenium的话,记得加等待,确保原文元素加载完成后再获取HTML:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://translate.google.com/") # 等待原文容器加载完成 wait = WebDriverWait(driver, 10) wait.until(EC.presence_of_element_located((By.CLASS_NAME, "gt-src-wrap"))) # 再获取页面HTML进行处理 page_html = driver.page_source # 后续BeautifulSoup处理代码同上... driver.quit()
内容的提问来源于stack exchange,提问作者dlis168
相关产品推荐
相关产品推荐

