xhs
本软件工具仅限于学术交流使用,严格遵循相关法律法规,符合平台内容合法性,禁止用于任何商业用途!
一、背景分析
1.1 开发背景
小红书作为国内极具影响力的社区种草平台,汇聚海量用户且拥有极高的日活跃度,其笔记下方的评论区蕴含丰富的信息价值。在合法合规、遵循平台规则以及尊重用户隐私的前提下,对小红书评论数据进行合理采集分析,能够帮助企业深入了解消费者对商品和品牌的评价与反馈,从而更好地把握消费者喜好、需求以及购买意向。
基于这样的探索需求,我运用 Python 开发了一款数据采集辅助软件 ——【爬小红书搜索评论软件】 。这款软件严格按照平台公开的接口规范和数据使用政策进行设计开发,确保数据采集行为的合法性与合规性。软件支持两种合规的数据采集模式:
根据关键词采集评论:在遵循平台搜索规则和数据获取权限的基础上,通过合法输入笔记关键词,获取对应的笔记链接,进而从允许访问的笔记链接中提取评论信息 。
根据笔记链接采集评论:用户提供合法获取且平台允许分析的笔记链接,软件依此合规地获取相关评论数据。
用户可根据自身需求,在合法合规的前提下选择其中一种模式进行数据采集。
1.2 软件界面
1.3 结果展示
在合法合规及遵守平台规则的前提下,展示符合数据使用范围的爬取结果示例:
1.4 演示视频
软件在合法合规操作流程下的运行演示:
1.5 软件说明
几点重要说明,请详读了解:
代码语言:python代码运行次数:0运行复制1. Windows用户可直接双击打开使用,无需Python运行环境,操作便捷。
2. 软件严格通过平台公开允许的接口协议进行数据交互,并非通过模拟浏览器等RPA类工具,确保稳定性与合规性 。
3. 先在cookie.txt中填入符合平台规定获取方式的自己的cookie值,方便重复使用(内附合法合规的cookie获取方法)。
4. 支持按平台允许的笔记类型(综合/视频/图文)和排序方式(综合/最新/最热)进行数据获取。
5. 支持多个的设置项有:在平台规则允许范围内的笔记关键词、笔记链接、评论关键词、IP属地 。
6. 每个关键词最多可采集220条笔记,与网页端在平台规则下的搜索数量一致。
7. 爬取过程中,每爬一页,存一次csv。并非爬完最后一次性保存!防止因异常中断导致丢失前面的数据(每条间隔1~2s,避免对平台服务器造成过大压力)。
8. 爬取过程中,有log文件详细记录运行过程,方便回溯,同时确保记录内容符合平台隐私政策。
9. 爬取过程中,在符合平台数据处理规则下,评论筛选同时进行。并非全部评论爬完再一次性筛选!所以效率较高!
10. 笔记csv含10个字段,有:关键词,页码,笔记id,笔记链接,笔记标题,笔记类型,点赞数,用户id,用户主页链接,用户昵称(确保各字段数据获取与使用符合平台及用户隐私相关规定)。
11. 评论csv含10个字段,有:笔记链接,页码,评论者昵称,评论者id,评论者主页链接,评论时间,评论IP属地,评论点赞数,评论级别,评论内容(确保各字段数据获取与使用符合平台及用户隐私相关规定)。
以上。
二、主要技术
软件全部模块采用 python 语言开发,主要分工如下:
- tkinter:GUI软件界面
- requests:通过合法合规的接口进行爬虫请求
- json:解析响应数据
- pandas:保存csv结果、数据清洗
- logging:日志记录,确保记录内容符合平台与法律规定
出于版权考虑,暂不公开源码,仅向用户提供软件使用。同时,确保软件使用过程严格遵循平台规则与相关法律法规。
三、功能介绍
3.0 填写 cookie
开始采集前,需按照平台规定的合法方式获取并把自己的 cookie 值填入 cookie.txt 文件。
3.1 根据关键词爬评论
爬取思路:在遵循平台规则下,通过合法输入笔记关键词 -> 获取平台允许访问的笔记链接 -> 提取允许采集的评论
先填写左上区在平台规则允许范围内的笔记筛选项,再填写右上区符合平台规定的评论筛选项,点击按钮 1 进行合规的数据采集。
3.2 根据笔记链接爬评论
爬取思路:使用合法获取且平台允许分析的笔记链接 -> 提取允许采集的评论
先填写中上区合法合规的笔记链接,再填写右上区符合平台规定的评论筛选项,点击按钮 2 进行合规的数据采集。
四、重要!技术栈
软件全部模块采用python语言开发,主要分工如下:
代码语言:python代码运行次数:0运行复制tkinter:GUI软件界面
requests:爬虫请求
json: 解析响应数据
pandas:保存csv结果、数据清洗
logging:日志记录
软件界面核心代码:
代码语言:python代码运行次数:0运行复制# 创建主窗口
root = tk.Tk()
root.title('爬小红书搜索评论软件v1.1')
# 设置窗口大小
root.minsize(width=900, height=650)
爬虫部分代码:
代码语言:python代码运行次数:0运行复制# 发送请求
r = requests.get(url, headers=h1)
# 接收响应数据
json_data = r.json()
保存结果数据核心代码:
代码语言:python代码运行次数:0运行复制# 保存数据到DF
df = pd.DataFrame(
{
'笔记链接': '/' + note_id,
'笔记链接_长': note_url2,
'页码': page,
'评论者昵称': nickname_list,
'评论者id': user_id_list,
'评论者主页链接': user_link_list,
'评论时间': create_time_list,
'评论IP属地': ip_list,
'评论点赞数': like_count_list,
'评论级别': comment_level_list,
'评论内容': content_list,
}
)
# 保存到csv
df.to_csv(self.result_file2, mode='a+', header=header, index=False, encoding='utf_8_sig')
日志记录功能核心代码:
代码语言:python代码运行次数:0运行复制def get_logger(self):
self.logger = logging.getLogger(__name__)
# 日志格式
formatter = '[%(asctime)s-%(filename)s][%(funcName)s-%(lineno)d]--%(message)s'
# 日志级别
self.logger.setLevel(logging.DEBUG)
# 控制台日志
sh = logging.StreamHandler()
log_formatter = logging.Formatter(formatter, datefmt='%Y-%m-%d %H:%M:%S')
# info日志文件名
info_file_name = time.strftime("%Y-%m-%d") + '.log'
# 将其保存到特定目录,ap方法就是寻找项目根目录,该方法博主前期已经写好。
case_dir = r'./logs/'
info_handler = TimedRotatingFileHandler(filename=case_dir + info_file_name,
when='MIDNIGHT',
interval=1,
backupCount=7,
encoding='utf-8')
self.logger.addHandler(sh)
sh.setFormatter(log_formatter)
self.logger.addHandler(info_handler)
info_handler.setFormatter(log_formatter)
return self.logger
软件首发公众号 "老男孩的平凡之路",欢迎在合法合规的前提下交流!