自打双十一出来后,又开始618,好了现在718都出来了,生怕大家不买了~
好好好,既然这样,今天我们就用Python来采集一下某宝的商品评论数据进行分析,以后购物不踩坑。
话不多说,让我们开始吧~
准备工作
环境使用
Python 3.10 解释器
Pycharm 编辑器
模块使用
requests >>> 数据请求 pip install requests
pandas >>> 数据处理 pip install pandas
jieba >>> 分词处理 第三方模块 pip install jieba
wordcloud >>> 词云图 第三方模块 pip install wordcloud
为了让大家更深入的学会本案例,昨晚熬夜加班录制了详细的视频讲解,希望对大家有帮助,跟源码一起打包好了,直接文末名片领取,点我直达文末。
爬虫实现基本流程
一、数据来源分析
1.明确需求
明确采集的网站以及数据内容
- 网址: https://******?spm=a21n57.1.item.2.3b4a5325fap7JU&priceTId=21 47813017210377164087471ea11c&utparam=%7B%22aplus_abtest%22:%22a5736e758474a 155ced3b085925c0e39%22%7D&id=792822950990&ns=1&abbucket=4
- 数据: 评论相关信息内容
2.抓包分析
通过浏览器开发者工具分析对应的数据位置
- 打开开发者工具
- F12 / 右键点击检查选择 network (网络)
- 刷新网页
- 让本网页数据(我们需要的数据)重新加载一遍
- 通过关键字搜索找到对应的数据位置
- 返回数据包比较多, 比较杂
- 关键字: 需要什么数据就搜什么数据
数据包地址: https://*****m/h5/mtop.alibaba.review.list.for.new.pc.detail/1.0/
二、代码实现步骤
1.发送请求
模拟浏览器对于url地址发送请求
模拟浏览器
使用请求标头里面参数内容
- 开发者工具 -> 网络 -> 点击对应数据包 -> 标头 -> 请求标头(参数)
- 请求标头复制之后在代码中, 字典形式
字典: 构建完整键值对
dit = {'cookie': 'value', 'ua': 'value1'} key 键
value 值
'key': 'value' 键值对
请求网址
发送请求
2.获取数据
获取服务器返回响应数据
response.text
- 获取响应的文本数据 -> 字符串
response.json()
- 获取响应的json数据 -> 一般情况 字典
- 响应数据必须是完整json数据格式
- 响应数据是由 {} / [] 包裹起来
response.content
- 获取响应的二进制数据 -> 二进制
- 一般用于获取图片/视频/音频/特定格式文件(zip/psd/pdf) 数据
如果多了一部分内容 xxxx({…数据内容…}) 不是完整的json数据格式
完整json格式
- {…数据内容键值对形式…}
- [{键值对},{键值对}]
3.解析数据
提取我们需要的数据内容
返回响应数据: mtopjsonp8({…数据内容…})
-
直接通过正则匹配相关数据 (提取评论 昵称…)
-
通过正则提取完整json数据 -> 转成json字典数据, 根据键值对取值提取数据内容
正则表达式简单使用
re.findall(‘匹配的数据’, ‘数据源’) 表示找到所有你想要的数据,从什么地方, 去匹配什么数据。
4.保存数据
把提取的数据保存表格文件
# 导入csv模块 import csv # 创建文件对象
f = open('data.csv', mode='w', encoding='utf-8', newline='') # 字典写入方法 fieldnames根据你提取数据进行修改
csv_writer = csv.DictWriter(f, fieldnames=['昵称', '评论时间', '产品', '评论'])
# 写入表头 csv_writer.writeheader() """
中间发送请求获取解析代码内容
"""
# 提取的数据内容
dit = {}
# 写入数据
csv_writer.writerow(dit)
print(dit)
5.批量采集数据
分析请求链接/参数变化规律
t: 时间戳 -> time模块获取当前时间戳
sign: 加密参数
data值pageNum: 页码
sign加密参数逆向分析
1.通过开发者工具搜索, 定位加密位置
2.对于疑似加密位置, 进行断点调试分析
2.1重新进入评论页面, 查看返回值
可视化词云图
代码展示
import pandas as pd
import jieba
import wordcloud
# 读取csv文件
df = pd.read_csv('data.csv')
# 获取评论内容
#Python学习交流裙
content = ' '.join([i for i in df['评论']])
# 分词处理
string = ' '.join(jieba.lcut(content))
# 配置词云图
wc = wordcloud.WordCloud(
width=1000,
height=700,
font_path='msyh.ttc',
stopwords={'了', '用', '还', '也', '都'}
)
# 传入词汇
wc.generate(string)
# 导出词云图
wc.to_file('cy.png')
print(string)
效果展示
感谢阅读,关注收藏不迷路~