python爬虫之模拟登录

2023-10-27

        最近应朋友要求,帮忙爬取了小红书创作平台的数据,感觉整个过程很有意思,因此记录一下。在这之前自己没怎么爬过需要账户登录的网站数据,所以刚开始去看小红书的登录认证时一头雾水,等到一步步走下来,最终成功,思路通了感觉其实还是很简单。

解决思路

        一开始我就只有这么一个网址小红书创作平台,和登录账号、密码,然后经过数次试错分析,最终拿出了解决方案。要爬取这个平台的数据,最核心的就是使用python模拟浏览器登录进去。探索过程:

1、在登陆界面点击用密码登录,输入账号密码验证码,通过chrome调试工具查看请求的header会发现,登录时是通过POST方式,请求的实际地址是:http://post.xiaohongshu.com/web_api/sns/v1/homerus/user/login_with_passwd,登录需要的参数有五个,分别是账号、密码、token、captcha(图片验证码)、zone值,其中zone是指你所在的国家的区号,例如中国为+86,因此值为86。那么这里处理比较困难的就是token和captcha。

            201214_5cFR_3642529.png

2、token哪里来的?是什么值?captcha是图片验证码,怎么处理?我发现进行在登陆界面点击用密码登录这个操作时,实际进行了一次GET请求,请求的地址http://post.xiaohongshu.com/api/homerus/login/captcha,并且返回了两个数据:一个是token,还有一个是验证码图片链接。怎么样?有没有很开心,需要什么就来什么。

            202608_Lt9l_3642529.png

3、因为每次登录token和captcha都会刷新,因此代码里面不能写死。那么对于captcha我的处理方式就是把图片下载下来,手动在程序中输入验证码作为参数;那token呢?token我已经获取了啊,直接作为参数即可!

        因此解决该模拟登录过程一共三步:一、通过get请求登陆界面获取token和图片验证码;二、token直接作为参数,验证码手动输入,加上账号、密码、区号作为post请求登录的参数;三、登陆成功后的response header里有我们需要的cookie,将其取出拼到新的request header里,请求要爬取数据的页面,成功获取数据!

实现过程

        具体代码实现就是按照上述思路的,我进行了注释,不再多做说明。

''' 第一步 '''
cookie = cookielib.CookieJar()
handler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler)
r=requests.get('http://post.xiaohongshu.com/api/homerus/login/captcha')
token = json.loads(r.text)['data']['token']     # get请求到的token
#print token
img_url=json.loads(r.text)['data']['url']
picture = opener.open(img_url).read()
local = open('F:/code.jpg', 'wb')               # 保存验证码到本地
local.write(picture)
local.close()
''' 第二步 '''
secret_code = raw_input('输入验证码: ')
login_data = {
    'phone': '136****0000',
    'passwd': 'XXXXXXXXXXXX',
    'token': token,                             # 获取的token
    'captcha': secret_code,                     # 手动输入的验证码
    'zone': '86'
}
headers = {'content-type': 'application/json'}  # payload请求方式
res = requests.post('http://post.xiaohongshu.com/web_api/sns/v1/homerus/user/login_with_passwd'
                    ,data=json.dumps(login_data),headers=headers)                                                      # 模拟登录
header={ ''' 第三步 '''
    'Accept': 'application / json, text / plain',
    'Connection': 'keep - alive',
    'Cookie': res.headers['Set-Cookie'].replace(' Path=/','')+'xhs_spid.6d29=21fa0111a09b6c3c'
                         '1516671392.1.15166716811516671392.6d3c3921-2e47-4cbe-b695-698499ac4636; xhs_spses.6d29=*',   # 登录成功的cookie拼装在header
    'Referer': 'http: // post.xiaohongshu.com /',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
resp = requests.get('http://post.xiaohongshu.com/web_api/sns/v1/homerus/note/list?page=1&page_size=200',headers=header)
data = json.loads(resp.text)                                                                                           # 成功获取数据

最终,我成功获取到如下所示的数据集。

                202026_xXVG_3642529.png     

        网上有很多模拟登录微博豆瓣等网站的教程和代码,但小红书这个平台貌似不太受用,这个思路对于很多需要登陆才能查看数据的网站都应该有帮助,因此分享在这里供参考。

转载于:https://my.oschina.net/nekyo/blog/1612055

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫之模拟登录 的相关文章

  • 将 JSON 发布到 Python CGI

    我已经安装了 Apache2 并且 Python 可以工作 但我有一个问题 我有两页 一个是 Python 页面 另一个是带有 JQuery 的 Html 页面 有人可以告诉我如何让我的 ajax 帖子正常工作吗
  • 为什么需要在 Python 方法中显式使用“self”参数? [复制]

    这个问题在这里已经有答案了 当在 Python 中的类上定义方法时 它看起来像这样 class MyClass object def init self x y self x x self y y 但在其他一些语言中 例如 C 您可以使用
  • str.translate 与 str.replace - 何时使用哪一个?

    何时以及为什么使用前者而不是后者 反之亦然 目前尚不完全清楚为什么有些人使用前者以及为什么有些人使用后者 它们有不同的目的 translate只能用任意字符串替换单个字符 但一次调用可以执行多次替换 它的参数是一个特殊的表 它将单个字符映射
  • 如何使用一个模型中间层的输出作为另一个模型的输入?

    我训练一个模型A并尝试使用中间层的输出name layer x 作为模型的附加输入B 我尝试像 Keras 文档一样使用中间层的输出https keras io getting started faq how can i obtain th
  • 键入的完整命令行

    我想获得输入时的完整命令行 This join sys argv 在这里不起作用 删除双引号 另外 我不想重新加入已解析和拆分的内容 有任何想法吗 你太迟了 当键入的命令到达 Python 时 您的 shell 已经发挥了它的魔力 例如 引
  • Keras model.predict 函数给出输入形状错误

    我已经在 Tensorflow 中实现了通用句子编码器 现在我正在尝试预测句子的类概率 我也将字符串转换为数组 Code if model model type universal classifier basic class probs
  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • 使用 NumPy 编写一个函数来计算具有特定公差的积分

    我想编写一个自定义函数来以特定容差对表达式 python 或 lambda 函数 进行数字积分 我知道与scipy integrate quad人们可以简单地改变epsabs但我想使用 numpy 自己编写该函数 From 这篇博文 htt
  • 如何在Windows中的Python 3.9下pip安装pickle?

    我需要pickle https docs python org 3 9 library pickle html module pickle包安装在我的下面Python 3 9在 Windows 10 下 我尝试过的 当尝试与pip inst
  • 无法在 virtualenv 中安装 libxml2

    我有一个问题libxml2蟒蛇模块 我正在尝试将其安装在python3 虚拟环境使用以下命令 pip install libxml2 python3 但它显示以下错误 Collecting libxml2 python3 Using cac
  • django 模板 - 如何动态访问变量?

    假设我有一个具有以下上下文的 django 模板 data1 this is data1 data2 this is data2 data name data2 现在我知道了data name 假设它是 data2 是否可以用它来访问变量d
  • 查找正在导入哪些 python 模块

    从应用程序中使用的特定包中查找所有 python 模块的简单方法是什么 sys modules是将模块名称映射到模块的字典 您可以检查其键以查看导入的模块 See http docs python org library sys html
  • 用 Python 绘制直方图

    我有两个列表 x 和 y x 包含字母表 A Z Y 包含它们在文件中的频率 我尝试研究如何在直方图中绘制这些值 但在理解如何绘制它方面没有成功 n bins patches plt hist x 26 normed 1 facecolor
  • 查找与另一列 Pandas 中的唯一值关联的列中的值的交集

    如果我有一个像这样的数据框 非常小的例子 col1 col2 0 a 1 1 a 2 2 b 1 3 b 2 4 b 4 5 c 1 6 c 2 7 c 3 我想要所有的交集col2当价值观与其独特性相关时col1值 因此在这种情况下 交集
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 如何按 pandas 中的值对系列进行分组?

    我现在有一只熊猫Series与数据类型Timestamp 我想按日期对其进行分组 并且每组中有许多行具有不同的时间 看似显而易见的方法类似于 grouped s groupby lambda x x date 然而 熊猫的groupby按索
  • 使用 pandas 单元格中列表的长度选择行[重复]

    这个问题在这里已经有答案了 我有一张表 df a b c 1 x y x 2 x z c d 3 x t e f g 只是想知道如何使用 c 列的长度选择行 such as df loc len df c gt 1 我知道这是不对的 正确的
  • JIRA Rest api 获取活动流

    我正在尝试使用下面的 api 获取 jira 实例的活动流 但它不起作用 有人能给我指出正确的方向吗 您应该查看此页面 https developer atlassian com docs atlassian platform common
  • 在Python中停止ThreadPool中的进程

    我一直在尝试为控制某些硬件的库编写一个交互式包装器 用于 ipython 有些调用对 IO 的影响很大 因此并行执行任务是有意义的 使用 ThreadPool 几乎 效果很好 from multiprocessing pool import
  • Biopython 可以执行 Seq.find() 来解释歧义代码吗

    我希望能够在 Seq 对象中搜索考虑歧义代码的子序列 Seq 对象 例如 以下内容应该是正确的 from Bio Seq import Seq from Bio Alphabet IUPAC import IUPACAmbiguousDNA

随机推荐

  • JAVA 项目---学生成绩管理系统(附标准源码)使用文件存储

    项目要求 GUI界面 实现以下功能 能够录入学生的信息及成绩 具体为姓名 学号 应用数学 大学英语 java编程 计算机应用 还能够根据输入学生姓名返回学生的信息 使用mysql数据库存储 参考这一篇博文 https blog csdn n
  • 【Git系列】Git到远程仓库

    Git到远程仓库 1 github账号注册 2 初始化本地仓库 3 创建GitHub远程仓库 4 给本地仓库起别名 4 1 查看远程库的连接地址 4 2 起别名 5 git推送操作 6 git克隆操作 7 邀请加入团队 push 7 1 未
  • Hough变换原理

    Hough变换原理 NEU icerain 2007 6 25 一 简单介绍 Hough变换是图像处理中从图像中识别几何形状的基本方法之一 Hough变换的基本原理在于利用点与线的对偶性 将原始图像空间的给定的曲线通过曲线表达形式变为参数空
  • ffmpeg 剪辑 剪切 一段 视频 windows中

    从视频的14分钟44秒处 剪10秒钟视频 存为 output mp4 文件 ffmpeg ss 00 14 44 t 00 00 11 i H BaiduNetdiskDownload xialuotefannao mp4 vcodec c
  • 分布式最小生成树算法

    分布式最小生成树算法 作为分布式算法中的经典算法之一 GHS分布式最小生成树算法的相关资料却并不多见 相关的原理介绍只是范范而谈 代码实现也比较少见 本文将汇总目前网络上可查阅的相关参考资料并结合自己的理解 旨在深入理解GHS的算法核心与实
  • 【起航】目标检测的里程碑R-CNN通俗详解

    前面我们学习了目标检测中常用的评价指标以及传统的目标检测思路 如下 目标检测中常用的评价指标传统目标检测思路 为了系统的学习 以及形成一个完整的知识体系 所以接下来我们逐步深入学习常见的目标检测模型 后面常见模型的学习顺序大致为R CNN
  • 解决dnd-kit点击事件和拖拽事件的冲突

    dnd kit https github com clauderic dnd kit 在使用dnd kit作为拖拽库时 可能会遇到拖拽的组件中包含可交互的组件 例如一个input或者button 当绑定上事件之后 例如click 这时浏览器
  • docker学习:网络连通

    这里主要就是使用docker connect命令来做网络连通 在这里插入图片描述 docker network命令也看一下吧 docker run d P name tomcat net 01 net mynet tomcat 测试两个不同
  • Vue-动画效果

    vue动画效果 vue中动画效果是很简单的一个东西 vue帮助我们做了一些动画封装 同时也支持自定义动画 过度 第三方库 这些方式都可以实现 我们一一举例说明 注意 下面的相关截图 由于不是gif动图 所以展示的并不全面 1 编写案例 首先
  • ROS的安装教程(noetic版本)

    笔者当时学习ROS时在安装ROS的时候花了一些功夫 现在回过头希望能对初入ROS的大家一些帮助 先为大家附上ubuntu20 04的清华下载源 下载后缀 iso的 点击跳转 1 配置ubuntu的软件和更新 首先打开 软件和更新 对话框 打
  • 广州数控车床M代码指令讲解

    辅助功能 M 功能 代码及其含义如果在地址M后面指令了2位数值 那就把对应的信号送给机床 用来控制机床的ON OFF M代码在一个程序段中只允许一个有效 M代码信号为电平输出 保持信号 M代码说明M03主轴正转M04主轴反转M05主轴停止M
  • angularjs使用文档

    ng directives ng app 指令 定义一个 AngularJS 应用程序 ng app myModule ng model 指令 把元素值 比如输入域的值 绑定到应用程序 双向绑定
  • 此url不支持http方法get_http协议(三)几种数据传输方式

    参考 老张http协议 三 几种数据传输方式 http协议的一些特点 1 无状态 http协议是一种自身不对请求和响应之间的通信状态进行保存的协议 即无状态协议 这种设置的好处是 更快的处理更多的请求事务 确保协议的可伸缩性 不过随着web
  • [机缘参悟-75]:谈谈“玻璃心”与“钝感力”

    目录 何谓 玻璃心 呢 钝感力 1 不要做毫无根据的猜想 2 学会从多个角度看问题 3 常常剖析自己的内心 4 感谢周遭的嫉妒和嘲讽 5 提高适应环境的能力 6 树立强势文化思维 7 修炼自己的自我觉知的层次 何谓 玻璃心 呢 从字面意思上
  • 冒泡排序 Bubble Sort

    冒泡排序 Bubble Sort 基本概念 冒泡排序的实现 时间复杂度 和 空间复杂度 稳定性 冒泡排序优化 基本概念 不断比较相邻的两个数 如果大于右边的数就交换 swap 直到末尾 这样最后一个元素就是最大的数 重复n次 排序完成 Ex
  • Learning to Navigate for Fine-grained Classification 论文学习

    Learning to Navigate for Fine grained Classification 论文地址 参考博客 介绍 问题描述 细粒度分类任务是用来区分上一级公共类的子类 例如野生鸟类 汽车型号 这些子类通常是由各个领域专家根
  • Qt——打开QT项目时只有.pro文件,头文件、源文件都不见了(涉及高低版本Qt的Kits工具,Could not find qmake spec ‘default‘.Error while par

    注意 若转载 请贴上链接 https blog csdn net qq 41042595 article details 126244047 如若发现抄袭或未标明来源现象 都可举报反馈 文章目录 前提 问题的由来 问题分析 回想 解决方案
  • C# JSON解析

    根据节点一层一层寻找 如果节点包含数组 则用JArray来访问 根据节点寻找 public string GetJsonResult string JSON string Result new string 2 JObject MyJObj
  • Linux 文件权限

    目录 1 查看文件权限 2 rwx 的意义 3 改变文件属性与权限 3 1 rwx 与 421 3 2 改变文件权限 chmod 3 3 改变文件所属组群 chgrp 3 4 改变文件所有者 chown Linux下一切皆文件 Linux中
  • python爬虫之模拟登录

    最近应朋友要求 帮忙爬取了小红书创作平台的数据 感觉整个过程很有意思 因此记录一下 在这之前自己没怎么爬过需要账户登录的网站数据 所以刚开始去看小红书的登录认证时一头雾水 等到一步步走下来 最终成功 思路通了感觉其实还是很简单 解决思路 一