如何用Selenium获取速卖通阿拉伯语站点的阿拉伯语翻译评论
问题:获取速卖通阿拉伯语站点的阿拉伯语翻译评论
我用以下Selenium代码爬取速卖通阿拉伯语站点的商品评论,但获取到的是自动翻译成英文的内容;手动点击翻译复选框后,只能拿到原语言评论,现在需要调整代码来获取已翻译成阿拉伯语的评论内容。
原代码:
from selenium import webdriver from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pandas as pd url = 'https://ar.aliexpress.com/item/1005003801507855.html?spm=a2g0o.productlist.0.0.1e951bc72xISfE&algo_pvid=6d3ed61e-f378-43d0-a429-5f6cddf3d6ad&algo_exp_id=6d3ed61e-f378-43d0-a429-5f6cddf3d6ad-8&pdp_ext_f=%7B%22sku_id%22%3A%2212000027213624098%22%7D&pdp_pi=-1%3B40.81%3B-1%3B-1%40salePrice%3BMAD%3Bsearch-mainSearch&gatewayAdapt=glo2ara' driver = webdriver.Chrome(ChromeDriverManager().install()) driver.maximize_window() driver.get(url) wait = WebDriverWait(driver, 10) driver.execute_script("arguments[0].scrollIntoView();", wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.tab-content')))) driver.get(wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '#product-evaluation'))).get_attribute('src')) data=[] while True: for e in driver.find_elements(By.CSS_SELECTOR, 'div.feedback-item'): try: country = e.find_element(By.CSS_SELECTOR, '.user-country > b').text except: country = None try: comment = e.find_element(By.CSS_SELECTOR, '.buyer-feedback span').text print(comment) except: comment = None data.append({ 'country':country, 'comment':comment }) try: wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '#complex-pager a.ui-pagination-next'))).click() except: break pd.DataFrame(data).to_csv('filename.csv',index=False)
解决方案
核心问题是进入评论页面后,没有主动设置翻译目标为阿拉伯语。以下是修改后的代码,重点处理翻译切换和目标语言评论的获取:
from selenium import webdriver from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pandas as pd url = 'https://ar.aliexpress.com/item/1005003801507855.html?spm=a2g0o.productlist.0.0.1e951bc72xISfE&algo_pvid=6d3ed61e-f378-43d0-a429-5f6cddf3d6ad&algo_exp_id=6d3ed61e-f378-43d0-a429-5f6cddf3d6ad-8&pdp_ext_f=%7B%22sku_id%22%3A%2212000027213624098%22%7D&pdp_pi=-1%3B40.81%3B-1%3B-1%40salePrice%3BMAD%3Bsearch-mainSearch&gatewayAdapt=glo2ara' driver = webdriver.Chrome(ChromeDriverManager().install()) driver.maximize_window() driver.get(url) wait = WebDriverWait(driver, 10) # 滚动到评论区域并进入评论iframe driver.execute_script("arguments[0].scrollIntoView();", wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.tab-content')))) comment_iframe_src = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '#product-evaluation'))).get_attribute('src') driver.get(comment_iframe_src) # 切换翻译为阿拉伯语 try: # 定位翻译切换复选框(速卖通阿拉伯语站的翻译控件通常在评论区顶部) translate_switch = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.translate-switch input'))) # 如果当前未选中,点击切换到阿拉伯语翻译 if not translate_switch.is_selected(): translate_switch.click() # 等待阿拉伯语翻译内容加载完成 wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.buyer-feedback span[lang="ar"]'))) except Exception as e: print(f"设置翻译时出错: {e}") data = [] while True: # 等待当前页所有评论加载完毕 wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, 'div.feedback-item'))) for e in driver.find_elements(By.CSS_SELECTOR, 'div.feedback-item'): country = None comment = None try: country = e.find_element(By.CSS_SELECTOR, '.user-country > b').text except: pass try: # 优先获取带阿拉伯语标识的评论内容 comment = e.find_element(By.CSS_SELECTOR, '.buyer-feedback span[lang="ar"]').text except: # fallback到默认文本,避免空值 try: comment = e.find_element(By.CSS_SELECTOR, '.buyer-feedback span').text except: pass data.append({ 'country': country, 'comment': comment }) # 处理翻页逻辑 try: next_page_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#complex-pager a.ui-pagination-next'))) # 检查按钮是否禁用,避免无限循环 if 'ui-pagination-disabled' in next_page_btn.get_attribute('class'): break next_page_btn.click() # 等待页面刷新,旧评论元素失效 wait.until(EC.staleness_of(driver.find_element(By.CSS_SELECTOR, 'div.feedback-item'))) except: break # 保存结果 pd.DataFrame(data).to_csv('aliexpress_ar_comments.csv', index=False) # 关闭浏览器 driver.quit()
关键修改点
- 翻译切换逻辑:进入评论页面后,主动定位翻译复选框并切换到阿拉伯语翻译状态,等待翻译内容加载完成
- 评论定位优化:优先选择带有
lang="ar"属性的元素,确保获取的是阿拉伯语翻译后的内容 - 翻页逻辑增强:检查翻页按钮是否禁用,避免无效点击;等待页面刷新后再继续爬取
- 异常处理优化:简化try-except结构,避免不必要的空值赋值
内容的提问来源于stack exchange,提问作者Reem
相关产品推荐
相关产品推荐

