使用Python爬虫爬取小红书完完整整的全过程
作者:松鼠爱吃饼干 发布时间:2022-03-23 05:12:44
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
以下文章来源于Python进击者 ,作者kuls
Python爬虫、数据分析、网站开发等案例教程视频免费在线观看
https://space.bilibili.com/523606542
小红书
首先,我们打开之前大家配置好的charles
我们来简单抓包一下小红书小程序(注意这里是小程序,不是app)
不选择app的原因是,小红书的App有点难度,参照网上的一些思路,还是选择了小程序
1、通过charles抓包对小程序进行分析
我们打开小红书小程序,随意搜索一个关键词
按照我的路径,你可以发现列表中的数据已经被我们抓到了。
但是你以为这就结束了?
不不不
通过这次抓包,我们知道了可以通过这个api接口获取到数据
但是当我们把爬虫都写好时,我们会发现headers里面有两个很难处理的参数
"authorization"和"x-sign"
这两个玩意,一直在变化,而且不知道从何获取。
所以
2、使用mitmproxy来进行抓包
其实通过charles抓包,整体的抓取思路我们已经清晰
就是获取到"authorization"和"x-sign"两个参数,然后对url进行get请求
这里用到的mitmproxy,其实和charles差不多,都是抓包工具
但是mitmproxy能够跟Python一起执行
这就舒服很多啊
简单给大家举例子
def request(flow):
print(flow.request.headers)
在mitmproxy中提供这样的方法给我们,我们可以通过request对象截取到request headers中的url、cookies、host、method、port、scheme等属性
这不正是我们想要的吗?
我们直接截取"authorization"和"x-sign" 这两个参数
然后往headers里填入
整个就完成了。
以上是我们整个的爬取思路,下面给大家讲解一下代码怎么写
其实代码写起来并不难
首先,我们必须截取到搜索api的流,这样我们才能够对其进行获取信息
if 'https://www.xiaohongshu.com/fe_api/burdock/weixin/v2/search/notes' in flow.request.url:
我们通过判断flow的request里面是否存在搜索api的url
来确定我们需要抓取的请求
authorization=re.findall("authorization',.*?'(.*?)'\)",str(flow.request.headers))[0]
x_sign=re.findall("x-sign',.*?'(.*?)'\)",str(flow.request.headers))[0]
url=flow.request.url
通过上述代码,我们就能够把最关键的三个参数拿到手了,接下来就是一些普通的解析json了。
最终,我们可以拿到自己想要的数据了
如果你想要获取到单篇数据,可以拿到文章id后抓取
"https://www.xiaohongshu.com/discovery/item/" + str(id)
这个页面headers里需要带有cookie,你随意访问一个网站都可以拿到cookie,目前看来好像是固定的
最后,可以把数据放入csv
总结
其实小红书爬虫的抓取并不是特别的难,关键在于思路以及使用的方法是什么。
来源:https://www.cnblogs.com/hhh188764/archive/2021/01/19/14297882.html
猜你喜欢
- 经常使用到有关数据库的操作。包括连接代码、SQL命令等等,又不曾刻意去记忆它们(我本人是不愿意去记这东东),所以常常在用到的时候又去查书本,
- 简介Python 中有个序列化过程叫作 pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化。也就
- 国内镜像源pip如果不配置国内镜像源的话,下载包的速度非常慢,毕竟默认的源在国外呢,国内主要的镜像源有如下,其中我个人喜欢用阿里云的镜像源。
- 下面是十个Python中很有用的贴士和技巧。其中一些是初学这门语言常常会犯的错误。注意:假设我们都用的是Python 31. 列表推导式你有
- 环境介绍python3.8numpymatplotlib第一步,绘制一个三维的爱心关于这一步,我采用的是大佬博客中的最后一种绘制方法。当然,
- 1、按位取反bitwise_not()按位取反就是将数值根据每个bit位1变0,0变1,比如0xf0按位取反就变成了0x0f,如果是uint
- pandas 中 inplace 参数在很多函数中都会有,它的作用是:是否在原对象基础上进行修改inplace = True:不创建新的对象
- 本文实例分析了python中的全局变量用法。分享给大家供大家参考。具体分析如下:Python是一种面向对象的开发语言,在函数中使用全局变量,
- 问题描述尝试用Python写一个Wordcloud的时候,出现了编码问题。照着网上某些博客的说法添添改改后,结果是变成了“UnicodeDe
- 只有mdf文件的数据库附加失败的修复 附加时报如下错误: 服务器: 消息 1813,级别 16,状态 2,行 1 未能打开新数据库 '
- 在Python 3.10发布之前,Python是没有类似于其他语言中switch语句的,要实现类似的功能最简单的方法就是通过if ... e
- 一、简介 XML(eXtensible Markup Languag
- Python简介及入门python为什么是python选择自己喜欢的语言,这往往不容易,更多的是根据需求话说,之前是java,大学用了三年+
- 1. 逆转字符串的三种方法1.1. 模拟C++中方法, 定义一个空字符串来实现通过设置一个空字符串, 然后讲参数中的字符串从后往前遍历, 使
- 前两天拉取公司前端代码修改,发现在开发者工具的sources选项里边,居然没有列出来我要调试的js脚本,后来观察了一下,脚本是动态在页面里引
- 下载opencv2.4.9(python2.7匹配)后 (1)运行OpenCV 2.4.9.exe;(2)配置Python:将\opencv
- MySql5.0以后均支持存储过程,最近有空,研究了一下这个格式:CREATE PROCEDURE 过程名 ([过程参数[,...]])[特
- 认知心理学家Donald A. Norman将人类的行动分解成七个阶段:1. 确定目标2. 确定意图3. 明确行动内容4. 执行5. 感知外
- 目录一·Numpy库中操作文件1.操作csv文件2.在pycharm中操作csv文件3.其他情况(.npy类型文件)二·Pandas库中操作
- 缓动,学名为Tween,缓冲移动的简称。要想页面内容切换起来舒服,就使用淡入淡出特效,要想让页面元素动起来自然,就要使用缓动效果。这两个混合