使用Python抓取商品页面评论:仅获取前4条,求全量评论抓取修正方案
修正商品全部评论的爬虫代码
嘿,我瞅了你的代码,发现几个关键问题导致只能抓到前4条评论,咱们来一步步解决:
原代码的核心问题
- 同时混用了
requests(静态页面请求)和selenium(动态页面渲染),你用html.fromstring解析的是requests拿到的静态页面,而网站的评论是动态加载的,静态页面里只有初始的几条评论 - 按钮定位的XPath有语法错误,
"是HTML转义字符,直接写在Python代码里会导致定位失败 - 没有处理评论的持续加载逻辑——电商网站的评论大多需要多次点击“加载更多”或者滚动页面才能全部显示,只点一次按钮肯定拿不全
修正后的完整代码
咱们统一用Selenium来处理动态渲染的内容,确保能抓到所有评论:
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 as EC import time # 初始化Chrome驱动(确保你的电脑上安装了对应版本的chromedriver) driver = webdriver.Chrome() try: target_url = 'https://mamaearth.in/product/glow-serum-foundation-almond-glow' driver.get(target_url) driver.maximize_window() # 循环点击"加载更多评论"按钮,直到没有更多评论可加载 while True: try: # 显式等待加载按钮出现,用文本定位比样式更稳定 load_more_button = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, '//div[contains(text(), "Load More Reviews")]')) ) # 滚动到按钮位置,避免被页面元素遮挡 driver.execute_script("arguments[0].scrollIntoView(true);", load_more_button) time.sleep(1) # 给页面留一点加载缓冲时间 load_more_button.click() except: # 捕获异常说明没有更多按钮了,退出循环 print("所有评论已加载完成!") break # 等待最后一批评论加载完毕 time.sleep(3) # 提取评论内容和评论者名称 comment_elements = driver.find_elements(By.CLASS_NAME, 'ReviewItem_content') reviewer_elements = driver.find_elements(By.CLASS_NAME, 'ReviewItem_header_name') # 输出或保存数据 for reviewer, comment in zip(reviewer_elements, comment_elements): print(f"评论者: {reviewer.text.strip()}") print(f"评论内容: {comment.text.strip()}\n") finally: # 不管成功失败,最后都关闭浏览器 driver.quit()
关键改进点
- 全程用Selenium处理动态页面,彻底避免静态请求和动态渲染的冲突
- 用循环点击加载按钮的逻辑,确保所有隐藏的评论都被加载出来
- 改用
WebDriverWait显式等待,元素定位更稳定,不容易出现找不到元素的超时问题 - 用按钮的文本内容定位,比依赖易变的样式属性更可靠
- 添加滚动到按钮的操作,防止按钮被页面导航栏或其他元素遮挡导致点击失败
内容的提问来源于stack exchange,提问作者Abhishek Singh
相关产品推荐
相关产品推荐

