输入文章id,爬取小红书某文章下所有评论

news2024/11/15 20:30:10
import requests
import time
import csv

f = open('小红书评论.csv',mode = 'a',encoding='utf-8',newline='')
csv_writer = csv.DictWriter(f,fieldnames=['内容','点赞数量','发布时间','昵称','头像链接','用户id'])
csv_writer.writeheader()


def spider(url):
    headers = {
        "Cookie":"abRequestId=5f54ec59-544b-52c0-b01d-62d56402dd95; webBuild=4.3.7; xsecappid=xhs-pc-web; a1=18e0498a02cmjc4tzjhx0oil63new9kjrehuuqtkh50000105941; webId=a640f94763a3e178d4f030bdf060b231; websectiga=29098a4cf41f76ee3f8db19051aaa60c0fc7c5e305572fec762da32d457d76ae; sec_poison_id=cebf9dc6-c4ca-45ad-9630-1db3121f1fcc; gid=yYd84jY0YDF2yYd84jY08dA9JS6VS49uVxC8xTxl31KqI728dEjTV7888y82j4y8fDjjDDS8; unread={%22ub%22:%2265c2bd1d0000000008020eb8%22%2C%22ue%22:%2265dbe0660000000007025c7c%22%2C%22uc%22:29}; cache_feeds=[]; web_session=040069b11b6dee561a0637c9d1374b217e6e5a",
        "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    }

    response = requests.get(url=url,headers=headers).json()
    return response
def get_time(ctime):
    timeArray = time.localtime(int(ctime/1000))
    otherStyleTime = time.strftime("%Y.%m.%d",timeArray)
    return str(otherStyleTime)
def get_sub_comments(note_id,root_comment_id,sub_comment_cursor):
    while True:
        url = f"https://edith.xiaohongshu.com/api/sns/web/v2/comment/sub/page?note_id={note_id}&root_comment_id={root_comment_id}&num=10&cursor={sub_comment_cursor}&image_formats=jpg,webp,avif"
        time.sleep(1)
        sub_comment_data = spider(url)
        for index in sub_comment_data['data']['comments']:
            dit_1 = {
                '内容': index['content'].strip(),
                '点赞数量': index['like_count'],
                '发布时间': get_time(index['create_time']),
                '昵称': index['user_info']['nickname'].strip(),
                '头像链接': index['user_info']['image'],
                '用户id': index['user_info']['user_id'],
            }
            print(dit_1)
            csv_writer.writerow(dit_1)
        if not sub_comment_data['data']['has_more']:
            break
        sub_comment_cursor = sub_comment_data['data']['cursor']
def get_comments(note_id):
    cursor = ''
    page = 0
    while True:
        time.sleep(1)
        url = f"https://edith.xiaohongshu.com/api/sns/web/v2/comment/page?note_id={note_id}&cursor={cursor}&top_comment_id=&image_formats=jpg,webp,avif"
        json_data = spider(url)
        for index in json_data['data']['comments']:
            dit = {
                '内容':index['content'].strip(),
                '点赞数量':index['like_count'],
                '发布时间':get_time(index['create_time']),
                '昵称':index['user_info']['nickname'].strip(),
                '头像链接': index['user_info']['image'],
                '用户id': index['user_info']['user_id'],
            }
            print(dit)
            csv_writer.writerow(dit)
            print('正在打印副评论:')
            get_sub_comments(note_id,index['id'],index['sub_comment_cursor'])
        if not json_data['data']['has_more']:
            break
        cursor = json_data['data']['cursor']
        page = page+1
        print(f'正在打印第{page}页数据:--------------------------------------')
get_comments("65ad0ecf000000000c004941")

结果展现:

 

总结:

学到了如何处理时间戳函数

将时间戳变成正常时间函数:

def get_time(ctime):  # ctime为爬取到的时间戳
    timeArray = time.localtime(int(ctime/1000))
    otherStyleTime = time.strftime("%Y.%m.%d",timeArray)
    return str(otherStyleTime)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1487996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序员竟然还有职业规划手册?

《程序员职业规划手册》不是一本具体的书,而是由前阿里技术总监雪梅老师讲授的一个专栏课程,总共有20讲,内容基本都是图片和文字形式,也有对应的语音讲述。 回顾了下毕业工作的这几年,我买过很多学习课程,…

【Python】进阶学习:pandas--read_csv()用法详解

🚀【Python】进阶学习:pandas–read_csv()用法详解🚀 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教…

Windows服务器:通过nginx反向代理配置HTTPS、安装SSL证书

先看下效果: 原来的是 http,配置好后 https 也能用了,并且显示为安全链接。 首先需要 SSL证书 。 SSL 证书是跟域名绑定的,还有有效期。 windows 下双击可以查看相关信息。 下载的证书是分 Apache、IIS、Tomcat 和 Nginx 的。 我…

redis批量删除指定前缀key四种方法(收藏)

这篇文章主要介绍了redis批量删除指定前缀key四种方法。 目录 redis批量删除指定前缀key四种方法 第一种:第二种:第三种:第四种:Redis 如何批量删除指定前缀的Key 编码方式 redis批量删除指定前缀key四种方法 第一种&#xff…

【题解】—— LeetCode一周小结9

【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结8 26.二叉搜索树的范围和 题目链接:938. 二叉搜索树的范围和 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。 示例 1: 输…

SpringBoot-yaml语法

1.概念 在Springboot的项目中,配置文件有以下几种格式: Application.propertiesApplication.yamlApplication.yml 其中官方推荐我们使用yaml的格式(因为能表示的数据类型很多样) 2.基本语法 # yaml形式的配置文件# 普通的key-value(分号之后…

windows环境下Grafana+loki+promtail入门级部署日志系统,收集Springboot(Slf4j+logback)项目日志

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

MyBatis操作数据库(XML方式)

MyBatis是一个持久层框架,和Spring没有任何关系,可以用来简化数据库的操作! 创建工作: 创建Spring Boot工程,并导入MyBatis的起步依赖,Mysql的依赖等 配置数据 #配置数据库的连接字符串 spring:datasour…

ruoyi 图片等文件资源读取

老是忘,记录一下 ResourcesConfig 文件下 /** 本地文件上传路径 */ registry.addResourceHandler(Constants.RESOURCE_PREFIX "/**").addResourceLocations("file:" RuoYiConfig.getProfile() "/"); /*** 资源映射路径 前缀*/ …

C++使用工具进阶(LOG输出、堆栈跟踪、代码结构、code review)

0. 简介 对于C,无论是大学生还是算法工程师都是非常需要学习并使用的一门语言,而C不像python、rust一样简单好用。不单单是在嵌套复杂代码后的逻辑还是各种类和堆栈的管理,都是非常头疼的问题。一般来说对于LOG类很多都是使用GLOG、而堆栈跟…

STM32 (1)

1.基本信息 stm32是由ST公司生产的一种32位微控制器(单片机)。 1.1 各种型号 stm32是32位单片机的总称,有多种不同的系列。 32即用32个比特位表示一个地址,寻址范围:0x00000000 --0xffffffff (4GB) 1.2 存储密度 …

本地如何配置支付宝模拟支付场景并结合内网穿透实现公网环境调试开发?

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 前言 在沙箱环境调试支付SDK的时候,往往沙箱环境部署在本地,局限性大,在沙箱环境…

[环境配置]ssh连接报错“kex_exchange_identification: read: Connection reset by peer”

已经被VScode ssh毒死好几次了,都是执行命令意外中断,然后又VSCode里连不上、本机Terminal也连不上了。。。 重启远程服务器,VSCode可以连上了, 系统ssh还是不行,报错“kex_exchange_identification: read: Connecti…

数字化转型对企业有什么意义

降本增效,提高生产力 数字化转型可以引入自动化和智能化技术、帮助企业优化流程、减少人工操作和错误,提高工作效率和生产力。例如,使用机器人流程自动化 (RPA) 可以自动执行重复性任务,使员工能够专注于更具价值的工作。除了通过…

YOLOv5独家原创改进:特征融合涨点篇 | 广义高效层聚合网络(GELAN) | YOLOv9

💡💡💡本文独家改进:即结合用梯度路径规划(CSPNet)和(ELAN)设计了一种广义的高效层聚合网络(GELAN),高效结合YOLOv5,实现涨点。 将GELAN添加在backbone和head处,提供多个yaml改进方法 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现…

5.测试教程 - 进阶篇

文章目录 1.按测试对像划分1.1**界面测试**1.2**可靠性测试**1.3**容错性测试**1.4**文档测试**1.5**兼容性测试**1.6**易用性测试**1.7**安装卸载测试**1.8**安全测试**1.9**性能测试**1.10**内存泄漏测试** 2.按是否查看代码划分2.1黑盒测试(Black-box Testing)2.2白盒测试(W…

获取properties二个键值对的值

配置文件: 将属性文件中的值赋给Java类的成员变量: 测试方法: GetMapping("/test1") public String test1(String key) {JSONObject jsonUrl JSONObject.parseObject("{"url"}");System.out.println(" …

计算机网络-网络安全(一)

1.网络安全威胁和漏洞类型: 窃听 假冒 重放 流量分析 破环完整 病毒 木马 诽谤 非授权访问 拒绝服务 漏洞:物理、软件、不兼容、其他等。 2.网络安全信息数据五大特征: 完整性&…

四川首例强生全视人工晶体在成都爱尔眼科医院成功植入

【2024年3月1日,成都】全国首批、四川首例强生全视TECNIS Symfony™ Toric IOL植入手术在成都爱尔眼科医院成功开展,手术由爱尔眼科四川省区白内障学组组长、成都爱尔眼科医院副院长巫雷教授执刀。TECNIS Symfony™ Toric IOL的成功运用,不仅…

第二十一周周报

文献阅读:Recent Advances of Monocular 2D and 3D Human Pose Estimation: A Deep Learning Perspective 摘要:在本文中,作者提供了一个全面的 2d到3d视角来解决单目人体姿态估计的问题。首先,全面总结了人体的二维和三维表征。…