如何使用Python Selenium去除网页rt标签内的furigana假名注音
移除网页日语假名注音的抓取方案
问题场景
抓取带假名注音(furigana)的日语网页时,直接获取innerText会把<rt>标签里的注音内容附在汉字后(比如得到「16日にち、韓国かんこく」),需要只保留汉字和原文标点,得到「16日、韓国」。
可行解决方案
方法1:用Selenium执行JavaScript删除RT元素
直接通过JS操作DOM删除所有<rt>标签后再提取文本,这是最直接的方式:
from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Chrome() browser.get("目标网页URL") # 定位目标元素 element = browser.find_element(By.CLASS_NAME, "article-main") # 执行JS删除所有rt标签 browser.execute_script(""" const rtElements = arguments[0].querySelectorAll('rt'); rtElements.forEach(rt => rt.remove()); """, element) # 现在获取innerText就是不含注音的内容 article = element.get_attribute("innerText") print(article) browser.quit()
方法2:用BeautifulSoup解析HTML并移除RT标签
如果不想操作DOM,可以先获取innerHTML,用BeautifulSoup解析后删除所有<rt>标签再提取文本:
from selenium import webdriver from selenium.webdriver.common.by import By from bs4 import BeautifulSoup browser = webdriver.Chrome() browser.get("目标网页URL") element = browser.find_element(By.CLASS_NAME, "article-main") html_content = element.get_attribute("innerHTML") # 解析HTML并删除所有rt标签 soup = BeautifulSoup(html_content, "html.parser") for rt_tag in soup.find_all("rt"): rt_tag.decompose() # 获取处理后的文本 article = soup.get_text(strip=False) print(article) browser.quit()
你之前代码出错的原因
element.find_elements(By.TAG_NAME, "rt")返回的是WebElement列表,不是单个元素,所以不能直接调用.innerText;而且即使遍历列表,直接用replace也可能因为文本顺序或重复内容出问题,不如直接删除标签彻底。
内容的提问来源于stack exchange,提问作者hpbristol
相关产品推荐
相关产品推荐

