当前位置:网站首页 >  教程

零基础Python爬虫实战:淘宝评价数据采集与分析

时间:2026年06月04日 22:36:43 来源:易频IT社区

环境准备与依赖安装

在开始编写代码之前,必须先配置好Python运行环境。本教程基于Python 3.8版本开发,所有依赖库均为开源免费工具。请打开终端(Windows下为CMD或PowerShell,Mac下为Terminal),依次执行以下命令安装必要的库。

1. 安装Selenium自动化库

Selenium是本次实操的核心,用于模拟浏览器操作。执行命令:

pip install selenium

2. 安装Webdriver管理器

为了自动匹配Chrome浏览器版本,避免手动下载驱动的麻烦,需安装该管理器:

pip install webdriver-manager

3. 安装数据处理与可视化库

用于后续的清洗数据和生成词云:

pip install pandas jieba wordcloud matplotlib

4. 准备中文字体文件

生成词云时,Matplotlib默认不支持中文显示,会导致乱码。请确保系统中安装了黑体(SimHei)或微软雅黑。如果是Linux服务器环境,需要下载SimHei.ttf字体文件并放到代码同级目录下,并在代码中指定路径。

淘宝评价采集脚本编写

淘宝对爬虫限制较严,直接请求接口容易被拦截。最稳妥的零门槛方案是使用Selenium模拟真实用户行为。以下代码实现了自动打开浏览器、等待用户扫码登录、翻页采集评价的功能。

零基础Python爬虫实战:淘宝评价数据采集与分析

新建一个文件名为taobao_spider.py,将以下代码完整复制进去。注意:代码中包含了反自动化检测的特征隐藏代码,这是通过淘宝验证的关键。

import time
import csv
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 selenium.webdriver.chrome.options import Options
def init_driver():
"""初始化浏览器配置,添加反爬虫参数"""
chrome_options = Options()
禁用自动化控制特征,防止被识别为机器人
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
忽略SSL证书错误
chrome_options.add_argument('--ignore-certificate-errors')
设置窗口大小
chrome_options.add_argument('--window-size=1920,1080')
自动下载并配置Driver
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
执行CDP命令隐藏webdriver特征
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
return driver
def get_reviews(driver, product_url):
"""核心采集逻辑"""
driver.get(product_url)
print("请在30秒内完成扫码登录!")
time.sleep(30)   留出充足时间手动扫码
点击“全部评价”Tab,确保进入评价列表
try:
注意:淘宝类名可能变动,若报错请根据F12检查更新
driver.find_element(By.CSS_SELECTOR, ".rate-tab > li:nth-child(2)").click()
time.sleep(2)
except:
print("已尝试切换Tab,请确认当前页面为评价列表")
all_data = []
page = 1
while True:
print(f"正在采集第 {page} 页...")
time.sleep(3)   等待动态加载
定位评价列表容器
try:
items = driver.find_elements(By.CSS_SELECTOR, ".rate-grid > .rate-item")
if not items:
尝试另一种常见的CSS选择器结构
items = driver.find_elements(By.CSS_SELECTOR, ".ReviewsList .item")
except Exception as e:
print(f"本页未找到评价数据: {e}")
break
for item in items:
try:
提取用户名
user = item.find_element(By.CSS_SELECTOR, ".user-info").text
提取评价内容
content = item.find_element(By.CSS_SELECTOR, ".rate-content").text
提取日期
date = item.find_element(By.CSS_SELECTOR, ".rate-time").text
all_data.append([user, content, date])
except:
continue
翻页逻辑
try:
next_btn = driver.find_element(By.CSS_SELECTOR, ".next.next-disabled")
print("检测到‘下一页’不可点击,采集结束。")
break
except:
try:
driver.find_element(By.CSS_SELECTOR, ".next.next-active").click()
page += 1
time.sleep(2)  翻页等待
except:
print("未找到下一页按钮,采集结束。")
break
return all_data
def save_to_csv(data, filename="reviews.csv"):
"""保存数据到CSV"""
with open(filename, 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(['用户', '评价内容', '日期'])
writer.writerows(data)
print(f"数据已保存至 {filename}")
if __name__ == "__main__":
替换为你想采集的商品详情页URL
TARGET_URL = "https://detail.tmall.com/item.htm?id=xxxxxx"
driver = init_driver()
data = get_reviews(driver, TARGET_URL)
save_to_csv(data)
driver.quit()

数据分析与词云生成

数据采集完成后,我们使用Pandas进行清洗,利用Jieba分词和Wordcloud库生成可视化的词云图,直观了解用户关注点。

新建文件analyze_data.py,写入以下代码。代码中内置了停用词过滤逻辑,会自动去除“的”、“了”、“非常”等无意义高频词。

import pandas as pd
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
设置中文字体,Windows通常使用SimHei,Mac使用Arial Unicode MS
如果是Linux环境,请指定具体的ttf文件路径
font_path = "C:/Windows/Fonts/simhei.ttf"
def generate_wordcloud(csv_file):
1. 读取数据
try:
df = pd.read_csv(csv_file, encoding='utf-8-sig')
except:
df = pd.read_csv(csv_file, encoding='gbk')  尝试兼容编码
print(f"成功加载 {len(df)} 条评价数据")
2. 数据清洗:去除空值和重复内容
df = df.dropna(subset=['评价内容'])
df = df.drop_duplicates(subset=['评价内容'])
3. 合并所有评论文本
text = " ".join(df['评价内容'].tolist())
4. 加载停用词
stop_words = set(['的', '了', '在', '是', '我', '有', '和', '就',
'不', '人', '都', '一', '一个', '上', '也', '很',
'到', '说', '要', '去', '你', '会', '着', '没有',
'看', '好', '自己', '这'])
5. 分词处理
word_list = jieba.cut(text)
filtered_words = [w for w in word_list if len(w) > 1 and w not in stop_words]
final_text = " ".join(filtered_words)
6. 生成词云
if not final_text.strip():
print("有效文本为空,无法生成词云")
return
wc = WordCloud(
font_path=font_path,
background_color="white",
width width=800,
height=600,
max_words=200
)
wc.generate(final_text)
7. 显示并保存图片
plt.figure(figsize=(10, 8))
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.title("淘宝评价关键词云", fontsize=15)
plt.show()
wc.to_file("taobao_wordcloud.png")
print("词云已保存为 taobao_wordcloud.png")
if __name__ == "__main__":
generate_wordcloud("reviews.csv")

实操运行与结果查看

所有代码准备就绪后,按照以下步骤执行,即可看到最终结果。

步骤1:启动采集程序

在终端中运行采集脚本:

python taobao_spider.py

此时会自动弹出Chrome浏览器窗口。请务必在控制台提示“请在30秒内完成扫码登录”时,迅速使用手机淘宝扫描屏幕上的二维码。如果不扫码,程序无法获取到受保护的评价数据。登录成功后,脚本将自动开始翻页并提取数据,直到最后一页结束,并在当前目录下生成reviews.csv文件。

步骤2:运行分析脚本

确认CSV文件生成且有内容后,运行分析脚本:

python analyze_data.py

程序会弹出一个Matplotlib窗口展示生成的词云图,同时目录下会保存一张taobao_wordcloud.png图片。图片中字体越大的词汇,代表在买家中出现的频率越高,这就是该商品的核心卖点或槽点。

常见报错处理

  • NoSuchElementException: 这通常是因为淘宝更新了前端页面Class名称。解决方法是按F12打开开发者工具,重新定位评价内容的Class名,并修改Python代码中的CSS Selector。
  • 字体乱码: 如果生成的词云全是方框,请检查代码中的font_path是否正确指向了系统中的中文字体文件路径。
  • 滑动验证码: 如果在翻页过程中遇到滑块验证,Selenium无法自动通过。建议增加time.sleep()的时间,手动辅助滑块通过,或者更换网络IP重试。
标签 淘宝评价

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图