使用Python爬取小红书笔记与评论(仅供学习交流)

这篇具有很好参考价值的文章主要介绍了使用Python爬取小红书笔记与评论(仅供学习交流)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章

1. 写在前面

  除了对x-s、x-s-common进行分析实现加密算法,还有之前文章中提到的通过JS注入免扣加密算法的方式获取加密参数

加密分析及算法文章请阅读这篇文章:x-s、x-s-common加密分析(2024-01-10更新)

x-s的加密算法为JS实现、x-s-common的加密算法为Python实现

2. 分析加密入口

小红书rpc爬虫 python,Python爬虫实战,javascript,爬虫,wpf

可以看到上图断点处l包含x-s跟x-t的返回,看下面这行代码:

l = (a && void 0 !== window._webmsxyw ? window._webmsxyw : encrypt_sign)(s, i) || {};

window._webmsxyw函数内即加密逻辑,在自执行函数内部并添加在了window属性中

该函数接受两个参数,s是api接口的路径,i是请求提交的参数

3. 使用JS注入

可以使用Playwright或者pyppeteer实现,通过浏览器的JavaScript注入来获取加密参数,代码实现分别如下

Playwright方式:

import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as playwright:
        browser = await playwright.chromium.launch(headless=True)
        page = await browser.new_page()
		# 注入stealth.min.js脚本
        await page.add_init_script(path="stealth.min.js")
        url = "" # 请求api
        data = "" # 请求参数

        # 执行JavaScript
        encrypt_params = await page.evaluate('([url, data]) => window._webmsxyw(url, data)', [url, data])
        local_storage = await page.evaluate('() => window.localStorage')

        print(encrypt_params)
        print(local_storage)

        await browser.close()
        
asyncio.run(main())

pyppeteer方式:

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch(headless=True)
    page = await browser.newPage()

    # 注入stealth.min.js脚本
    stealth_script = open("stealth.min.js", "r").read()
    await page.evaluateOnNewDocument(stealth_script)

    url = ""  # 请求api
    data = ""  # 请求参数

    # 执行JavaScript
    encrypt_params = await page.evaluate('([url, data]) => window._webmsxyw(url, data)', [url, data])
    local_storage = await page.evaluate('() => window.localStorage')

    print(encrypt_params)
    print(local_storage)

    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

上面的stealth.min.js脚本注入的作用是为了防止被检测的,另外cookie参数需要设置属性来避免Web端出现滑动验证码

当然,这个都是爬虫最终工程化需要考虑的事情,这里主要还是通过非逆向分析的方式去解决加密参数问题!

window.localStorage在之前加密分析的文章中已经详细介绍了,localStorage是一个在浏览器中存储键值对的API,通常用于持久化地存储数据,所需的b1参数就在其中

JS注入方式运行结果如下所示:
小红书rpc爬虫 python,Python爬虫实战,javascript,爬虫,wpf

x-s跟x-t的加密参数通过注入的方式能够直接拿到,但是x-s-common的参数仍需要通过sign的方法加密计算生成!

Python版本的sign加密算法在之前的加密分析文章中已提供!JS注入的方式主要为了获取这些个参数:x-s、x-t、b1

JS注入的方式对于有前端基础及经验的小伙伴,就很简单了。通过上面的方式获取到所有的加密参数后,接下来就是爬虫的工程化

4. 爬虫工程化

以笔记搜索为例,爬虫代码实现如下:

import json
import httpx
from typing import Dict, Optional

async def request(self, method, url, **kwargs) -> Dict:
    async with httpx.AsyncClient(proxies=self.proxies) as client:
        response = await client.request(
            method, url, timeout=self.timeout,
            **kwargs
        )   
    data: Dict = response.json()
    if data["success"]:
        return data.get("data", data.get("success", {}))
    elif data["code"] == self.IP_ERROR_CODE:
        raise IPBlockError(self.IP_ERROR_STR)
    else:
        raise DataFetchError(data.get("msg", None))

async def unified_request(self, 
	uri: Optional[str] = None, 
	data: Optional[dict] = None,
	keyword: Optional[str] = None,
	page: Optional[int] = 1, 
	page_size: Optional[int] = 20,
	sort: Optional[SearchSortType] = SearchSortType.GENERAL,
	note_type: Optional[SearchNoteType] = SearchNoteType.ALL) -> Dict:
    
    if keyword:
        _host = "https://edith.xiaohongshu.com"
        uri = "/api/sns/web/v1/search/notes"
        data = {
            "keyword": keyword,
            "page": page,
            "page_size": page_size,
            "search_id": get_search_id(),
            "sort": sort.value,
            "note_type": note_type.value
        }
    elif uri and data:
        headers = await self._pre_headers(uri, data)
        json_str = json.dumps(data, separators=(',', ':'), ensure_ascii=False)
        return await self.request(method="POST", url=f"{self._host}{uri}",
                                  data=json_str, headers=headers)
    else:
        raise ValueError("Either 'uri' and 'data' or 'keyword' must be provided.")

    return await request(method="POST", url=f"{_host}{uri}", data=json.dumps(data), headers=await self._pre_headers(uri, data))

最后,订阅的小伙伴可找作者获取开箱即用的完整爬虫项目代码,如下:

JS注入方式笔记搜索:

小红书rpc爬虫 python,Python爬虫实战,javascript,爬虫,wpf

JS注入方式笔记评论:

小红书rpc爬虫 python,Python爬虫实战,javascript,爬虫,wpf文章来源地址https://www.toymoban.com/news/detail-793507.html

到了这里,关于使用Python爬取小红书笔记与评论(仅供学习交流)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python爬虫—爬取微博评论数据

    今日,分享编写Python爬虫程序来实现微博评论数据的下载。 具体步骤如下👇👇👇: Step1 :电脑访问手机端微博_https://m.weibo.cn/_ Step2 :打开一条微博_https://m.weibo.cn/detail/4907031376694279_ Step3 :URL地址中的_49070__31376694279_就是需要爬取的微博ID Step4 :将ID填写到_main_下即可,也支

    2024年03月21日
    浏览(47)
  • Python如何运用爬虫爬取京东商品评论

    打开京东商品网址(添加链接描述) 查看商品评价 。我们点击评论翻页,发现网址未发生变化,说明该网页是动态网页。 我们在 浏览器右键点击“检查” ,,随后 点击“Network” ,刷新一下,在搜索框中 输入”评论“ ,最终找到 网址(url) 。我们点击Preview,发现了我们需要

    2024年02月07日
    浏览(39)
  • 【2023最新B站评论爬虫】用python爬取上千条哔哩哔哩评论

    您好,我是 @马哥python说,一枚10年程序猿。 之前,我分享过一些B站的爬虫: 【Python爬虫案例】用Python爬取李子柒B站视频数据 【Python爬虫案例】用python爬哔哩哔哩搜索结果 【爬虫+情感判定+Top10高频词+词云图】\\\"谷爱凌\\\"热门弹幕python舆情分析 但我学习群中小伙伴频繁讨论

    2024年02月08日
    浏览(32)
  • 当我用Python爬取了京东商品所有评论后发现....

    不知道各位网购的时候,是否会去留意商品评价,有些小伙伴是很在意评价的,看到差评就不想买了,而有些小伙伴则是会对差评进行理性分析,而还有一类人不在乎这个。 当然这都是题外话,咱们今天主要的目的是使用Python来爬取某东商品的评价,并保存到CSV表格。 在进

    2024年02月11日
    浏览(31)
  • 【Python】爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据

    目录 前言 一、配置环境 1.1、 安装Python 1.2、 安装Requests库和BeautifulSoup库 1.3.、安装Matplotlib 二、登录豆瓣网(重点) 2.1、获取代理 2.2、测试代理ip是否可用 2.3、设置大量请求头随机使用 2.4、登录豆瓣网 三、爬取某一部热门电影数据 3.1、爬取全部长、短评论 3.2、获取用户

    2024年02月09日
    浏览(33)
  • python数据采集课设-京东手机评论爬取与分析

    1.手机评论采集,数据信息(评论,评分,用户,评论发布时间) 爬取不同的手机评论,需要设置不同的id  如上图红圈处即为手机vivo S12的id 结果展示: 2.去除停用词以及词云图展示: 本节代码对多款手机的评论进行循环处理 此代码需要使用的stopwords.txt文件以上传至资源

    2024年02月15日
    浏览(30)
  • 使用Puppeteer爬取地图上的用户评价和评论

    在互联网时代,获取用户的反馈和意见是非常重要的,它可以帮助我们了解用户的需求和喜好,提高我们的产品和服务质量。有时候,我们需要从地图上爬取用户对某些地点或商家的评价和评论,这样我们就可以分析用户对不同地区或行业的态度和偏好。但是,如何从地图上

    2024年02月09日
    浏览(32)
  • 使用selenium自动化工具爬取微博内容和评论

    任务需求是爬取微博的内容和评论。一开始我是准备直接用正常的爬虫来做,但是发现微博上的内容几乎都是动态加载生成的。所以了解了一下就学习使用·selenium自动化测试工具来爬取相关数据。 首先是不登录微博,发现只能查看最多二十条数据,这自然限制太大所以还是

    2024年02月02日
    浏览(38)
  • 用python语言爬虫爬取微博评论--上--初步爬虫(超详细版,大学生不骗大学生)

    目录 一、找到页面  二、学会使用检查元素 2.1 打开检查元素界面 2.2 找到所有评论所在的位置 2.2.1 搜索评论 2.2.2  找到data表 三、基础部分代码实现 ​​​​​​​ 全部已经更完(下面两个链接是中和下) https://blog.csdn.net/m0_68325382/article/details/137234661?spm=1001.2014.3001.5502 爬

    2024年04月10日
    浏览(42)
  • nodejs+vue+elementui学习交流和学习笔记分享系统

    Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。  前端技术:nodejs+vue+elementui,视图层其实质就是vue页面,通过编写vue页面从而展示在浏览器中,编写完成的vue页面要能够和控制器类进行交互,从而使得用户在点击网页进行操作时能够正常。 可以设置中间件来响应 H

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包