知乎登陆

本文介绍了如何使用Python进行知乎自动登录的步骤,详细分析了请求过程,包括需要的headers、cookies以及动态变化的部分。通过一步步排除法确定关键参数,并提供了遇到的问题及解决方案,最终实现自动获取二维码并完成登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知乎登陆

@(博客)[Python, 登陆, 知乎, 爬虫]


018.8.12

背景

因为学年综合实践准备的一部分需要爬取知乎全站,所以为了方便,自动登陆是很有必要的。而由于许多学习爬虫的各友,都爱拿知乎练手——其实我倒非然,这算是第一次对知乎“开战”,是客观因素导致的必然——以至于知乎加强了反扒机制
这里写图片描述

我爬虫经验有限,实在不知该对这样的加密如何下手,一番搜索引擎之后,得到的都是过期操作。Github上找到了通过二维码扫描登陆的思路,那就以此宣战吧。

也在此感谢这名网友的无私奉献,点击可查看

题外话

说句题外话:切不可以惯性思维

另:完整代码已上传Github,文章末尾有链接。里边的study文件是我整个思考过程中产生的测试代码,如果只是需要实现知乎登陆,则study文件可以直接删除

环境

(1)python3.6
(2)主要第三方库:

  • requests
  • PILpip3 install -i https://pypi.douban.com/simple/ pillow 利用豆瓣源,加快下载速度,因为直接安装可能会出现timeout的错误

(3)chrome

寻找切入点

这里写图片描述

第一步肯定是先来到知乎提供二维码登陆的界面,利用开发工具,可查看请求这个二维码图片需要那些数据
这里写图片描述
这里写图片描述

能看到是get请求,headers也很寻常,但多次刷新可发现请求的url地址有一部分在改变
这里写图片描述

这肯定算不上什么难点,我们寻找前面的文件,能找到这部分动态改变的值
这里写图片描述

为了方便阐述,那就把image称之为A文件,qrcode成为B文件。这里就有了一个思路,先请求B文件,拿到token值以后,拼接成目的url,再去请求A文件

问题的转移1

于是我们从A迁移到了B

这里写图片描述

可见请求B文件的时候,headers字段是真的很多,但绝对不会所有都必要,这只能排除法了

以我拙见是这样处理的,首先看清楚了,是POST请求(从爬虫到现在也几个月了,还是爬了不少网站,真的不提交数据用post请求的,我第一次见,所以之前一直是惯性思维的用get,然后一直请求失败, 所以各位入门爬虫的注意了,千万注意了别掉坑里
这里写图片描述

复制了所有headers,做一次post的请求,再看看状态码是不是201(为了避免请求被重定向,建议打印请求内容,或者关闭重定向,后面皆以打印内充处理不再单独提示)(对应study/test1.py文件
这里写图片描述

可以说很OK,然后就开始排除法,首先去掉的是最常用不到的噻。通过几轮排除下来,发现CookieUser-Agent是必要的,既然需要用到cookie,我们就得维持会话,所以要实例化一个session对象了,实现如下:
session = requests.session()

顺便也把Cookie分解了,看看需要哪些内容

for item in headers["Cookie"].split(";")
### 使用 Visual Studio Code 设计登录页面 #### 准备工作 安装并设置好 Visual Studio Code 的 PHP 开发环境有助于创建动态页[^2]。对于静态页面如登录页,HTML、CSS 和 JavaScript 是主要技术。 #### 创建项目结构 在 Visual Studio Code 中新建文件夹作为项目根目录,建议命名为 `zhihu-login` 或其他有意义的名字。此文件夹内应至少包含三个子文件夹:`css`, `js` 和 `images` 用于分别存储样式表、脚本以及图片资源。 #### 编写 HTML 文件 在项目根目录下创建名为 `index.html` 的文件,这是站的主要入口点。以下是简单的 HTML 结构: ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>登录</title> <!-- 链接外部 CSS --> <link rel="stylesheet" href="./css/style.css"> </head> <body> <div class="login-container"> <form action="#" method="post"> <h1>欢迎来到乎</h1> <input type="text" name="username" placeholder="用户名/邮箱"/> <input type="password" name="password" placeholder="密码"/> <button type="submit">登 录</button> <p><a href="#">忘记密码?</a></p> </form> </div> <!-- 引入JavaScript--> <script src="./js/main.js"></script> </body> </html> ``` #### 添加自定义字体到编辑器 为了使代码更易读取,可以按照特定方法更改 Visual Studio Code 的侧边栏字体样式,比如使用编程友好的字体 "Fira Code"[^3]。 #### 设置样式 (CSS) 在 `css` 文件夹里建立 `style.css` 来美化登录界面。这里仅给出部分示例代码片段: ```css /* css/style.css */ .login-container { width: 300px; margin: auto; padding-top: 5%; } .login-container form h1 { text-align: center; } ... ``` #### 增强用户体验 (JavaScript) 如果希望给用户提供更好的交互体验,则可以在 `js` 文件夹下的 `main.js` 加入必要的逻辑处理函数。例如验证输入字段是否为空等基本功能。 通过上述步骤便能利用 Visual Studio Code 构建出一个基础版的登录页面原型。当然实际产品还需要考虑更多细节和技术栈的选择。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值