在开始编写代码之前,必须先配置好Python运行环境。本指南基于Python 3.8版本开发,所有依赖库均通过pip进行安装。请打开终端(Terminal)或命令提示符(CMD),依次执行以下命令,确保所有组件安装完毕,缺少任何一个都会导致程序报错。
```bash pip install selenium==4.1.0 pip install pandas pip install snownlp pip install wordcloud pip install jieba pip install webdriver-manager ```注意:selenium版本建议锁定在4.1.0,新版本可能存在ChromeDriver兼容性问题。webdriver-manager库会自动管理浏览器驱动,无需手动下载chromedriver.exe,这是实现“零门槛”的关键配置。
淘宝对数据抓取的防护非常严格,直接请求接口会被立即拦截。我们采用Selenium自动化测试框架模拟真实用户行为。核心策略包括三点:
以下代码将实现“打开商品页 -> 等待登录 -> 翻页抓取 -> 情感分析 -> 生成词云”的全流程。请将以下代码保存为 taobao_analysis.py。
这部分代码负责引入所需的模块,并设置浏览器的基础参数。为了防止被识别为机器人,我们需要禁用一些自动化特征。
```python import time import random import pandas as pd from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from snownlp import SnowNLP from wordcloud import WordCloud import jieba import matplotlib.pyplot as plt 配置浏览器选项 options = webdriver.ChromeOptions() options.add_argument('--disable-blink-features=AutomationControlled') 禁用自动化特征 options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) 设置User-Agent,模拟Windows 10 Chrome环境 options.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"') ```这是程序的核心。get_comments函数接收商品URL作为参数,启动浏览器并开始抓取。为了确保不漏掉数据,我们使用了显式等待(WebDriverWait)机制。
```python def get_comments(product_url): 初始化浏览器驱动 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": """ Object.defineProperty(navigator, 'webdriver', { get: () => undefined }) """ }) driver.get(product_url) print(">>> 浏览器已打开,请在30秒内完成扫码登录!") 留出30秒时间供用户手动扫码 time.sleep(30) 点击“累计评价” tab,进入评论页 try: 尝试通过XPath找到评价Tab并点击 driver.find_element(By.XPATH, '//div[@id="detail"]//a[contains(@href, "reviews")]').click() time.sleep(2) except: print(">>> 未找到评价Tab,尝试直接滚动...") pass all_comments = [] page_num = 1 设置最大抓取页数,防止死循环,这里设为5页 while page_num <= 5: print(f"正在抓取第 {page_num} 页...") 模拟向下滚动,加载动态内容 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(random.uniform(2, 4)) 随机休眠2-4秒 定位评论内容,注意:淘宝XPath结构可能变动,需根据实际情况调整 这里使用较为通用的class定位策略 try: comment_elements = driver.find_elements(By.CSS_SELECTOR, '.tm-m-reviews-item-content > div') for element in comment_elements: text = element.text.strip() if text: all_comments.append(text) except Exception as e: print(f"本页抓取异常: {e}") 尝试点击“下一页” try: next_btn = driver.find_element(By.CSS_SELECTOR, '.next-next:not(.next-disabled)') next_btn.click() time.sleep(random.uniform(3, 5)) page_num += 1 except: print(">>> 没有下一页或已到达末尾,抓取结束。") break driver.quit() return all_comments ```
抓取下来的原始文本需要清洗。我们利用 SnowNLP 库计算情感倾向(0-1分,低于0.6判定为负面/差评),然后利用 Jieba 分词和 WordCloud 绘制差评关键词云。
```python def analyze_and_visualize(comments): if not comments: print("未抓取到任何评论数据。") return print(f"共抓取到 {len(comments)} 条评论,开始分析...") bad_comments = [] sentiments = [] 筛选差评并分析情感 for text in comments: try: s = SnowNLP(text) score = s.sentiments sentiments.append(score) 设定阈值,情感分低于0.5的视为差评,或者包含特定关键词 if score < 0.5: bad_comments.append(text) except: continue print(f"筛选出潜在差评/负面评论 {len(bad_comments)} 条。") if len(bad_comments) == 0: print("没有发现明显的差评,数据质量很高。") return 生成词云 将所有差评拼接成一个字符串 text_content = " ".join(bad_comments) 分词 words = jieba.cut(text_content) cut_text = " ".join(words) 配置词云参数 注意:font_path必须指定系统中的中文字体路径,否则词云会乱码 Windows通常是 C:/Windows/Fonts/simhei.ttf (黑体) Mac通常是 /System/Library/Fonts/PingFang.ttc try: wc = WordCloud( font_path="C:/Windows/Fonts/simhei.ttf", background_color="white", width=800, height=600, max_words=100 ) wc.generate(cut_text) 显示图片 plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.show() wc.to_file("bad_reviews_wordcloud.png") print(">>> 词云已保存为 bad_reviews_wordcloud.png") except Exception as e: print(f"生成词云失败,请检查字体路径是否正确。错误信息: {e}") 保存数据到CSV df = pd.DataFrame({ 'content': comments, 'sentiment': sentiments }) df.to_csv('taobao_comments_analysis.csv', index=False, encoding='utf-8-sig') print(">>> 数据已保存为 taobao_comments_analysis.csv") ```将上述模块整合,并添加主程序入口。你需要修改 target_url 为你想分析的淘宝商品详情页链接。
```python if __name__ == "__main__": 【关键步骤】替换这里为目标商品的URL 请务必使用完整的淘宝商品详情页链接 target_url = "https://detail.tmall.com/item.htm?id=123456789" print("程序启动...") comments_data = get_comments(target_url) analyze_and_visualize(comments_data) print("程序执行完毕。") ```代码编写完成后,按照以下步骤执行,即可获得分析结果。
python taobao_analysis.py。在实操过程中,可能会遇到以下环境问题,请对照解决方案处理:
原因:页面元素未加载完成或被遮挡。解决:在代码点击操作前增加 time.sleep(2),或者检查XPath是否因为淘宝改版而失效。
原因:词云找不到中文字体文件。解决:请确保 font_path 指向的路径在你的系统中真实存在。Windows用户可以通过C盘搜索 simhei.ttf 确认路径。
原因:登录未成功或商品页没有评价Tab。解决:确保扫码后看到的是已登录状态,且该商品确实有买家秀/评价数据。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图