使用Python爬取小红书笔记与评论(仅供学习交流)_python爬取小红书关键词所有笔记评论

【🏠作者主页】:吴秋霖
【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作!
【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关注《爬虫JS逆向实战》《深耕爬虫领域》
未来作者会持续更新所用到、学到、看到的技术知识!包括但不限于:各类验证码突防、爬虫APP与JS逆向分析、RPA自动化、分布式爬虫、Python领域等相关文章

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!

1. 写在前面

除了通过对X-s、X-s-c参数进行分析还原加密算法,还有之前文章中提到的通过JS注入免扣加密算法的方式获取加密参数,进行数据的抓取!此前,作者也是尝试过封装过以下API的功能:

  • 关键词搜索
  • 笔记抓取
  • 评论点赞
  • 笔记评论
  • 评论区艾特
  • 多级评论采集
  • 扫码协议登录

相关参数加密分析及算法可以阅读这篇文章:X-s、X-s-common加密纯算法还原(2024-03-10更新)

2. 分析加密入口

在这里插入图片描述

可以看到上图断点处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脚本是一位大佬开源的!注入的作用是为了防止被检测,另外CK参数需要设置属性来避免Web端出现滑动验证码

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

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

JS注入方式运行结果如下所示:
在这里插入图片描述

x-s跟x-t的加密参数通过注入的方式能够直接拿到,但是x-s-common的参数仍需要通过加密算法生成!但是这个参数目前适用的并不多,仍然以x-s参数检测为主

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

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

4. 爬虫工程化

以笔记搜索为例,下面对数据的抓取的示例是采用的协议(非浏览器自动化或注入)的方式。需要注意一下search_id是动态生成的!完整的爬虫代码实现如下所示:

import json
import time
import random
import execjs
import requests

def base36encode(number, digits='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/710b78f6645aa7b4dc9f9646835a4268.png)

 

![img](https://img-blog.csdnimg.cn/img_convert/e53b5fdd7fe9d9eae1490f8c585635eb.png)

![img](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)

![img](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

f79.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

<img src="https://img-community.csdnimg.cn/images/fd6ebf0d450a4dbea7428752dc7ffd34.jpg" alt="img" style="zoom:50%;" />
  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Python 爬虫示例,可以用于爬取小红书平台的数据。请注意,这个代码仅作为学习参考,未经小红书官方许可不得用于商业用途。 ```python import requests import json headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} def get_data(pageNum): url = 'https://www.xiaohongshu.com/fe_api/burdock/weixin/v2/search/notes' params = { 'sort': 'general', 'keyword': '化妆品', 'page': pageNum, 'pageSize': 20, 'needGifCover': 'false', 'platform': 'all' } response = requests.get(url, params=params, headers=headers) json_data = json.loads(response.text) return json_data if __name__ == '__main__': for i in range(1, 5): data = get_data(i) for item in data['data']: print(item['title']) ``` 上面的代码使用 requests 库发送 HTTP 请求,并使用 json 库解析响应数据。其中,`get_data` 函数接受一个参数 `pageNum`,表示要获取的页码。该函数构造了一个 HTTP GET 请求,并使用 requests 库发送请求。请求参数包括排序方式、关键词、页码、每页大小、是否需要 GIF 封面以及平台类型。请求成功后,调用 json.loads() 将响应数据转换为 Python 字典对象。 在主函数中,我们循环调用 `get_data` 函数,获取前 4 页的数据。对于每一页的数据,我们遍历其中的每一条笔记,打印出标题。当然,你可以根据自己的需求对数据进行存储或其他处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值