python模拟登陆知乎并爬取数据
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:31
一些废话1. 模拟登陆看了一眼上一篇日志的时间 已然是5个月前的事情了 不禁感叹光阴荏苒
其实就是我懒几周前心血来潮想到用爬虫爬些东西 于是先后先重写了以前写过的求绩点代码 爬了草榴贴图,妹子图网,后来想爬婚恋网上的数据分析 结果在第一步模拟登陆就卡住了 于是改爬知乎 因为有现成代码参考。
1.1 查看post参数
我用的是Chrome浏览器 按F12打开开发者工具 选到NetWork 然后登陆一次观察在登陆过程中post了哪些参数
collect估计是用来收集要发送的数据 email用来post数据看一下email的post data:

email和password对应账号密码 captcha对应验证码 remember_me对应是否记住登陆状态
1.2 找到_xsrf
唯一有些奇怪的是出现了_xsrf 不过它不会凭空出现 于是我考虑是不是这是从客户端的源代码上得到的 所以返回登陆页面去寻找这个变量 果不其然 在源码里找到了这个变量的藏身之处

然后用可以很方便地用BeautifulSoup解析得到_xsrf
_xsrf = soup.find('input',{'type':'hidden','name':'_xsrf'})['value']
1.3 得到正确的验证码

在验证码图片上右键检查可以得到图片的url 发现有Query String'r'和'type' 每刷新一次r都会改变 猜测r是random 是随机生成的 在一次Session中随机生成一个整数去get验证码
生成url 然后下载到本地 手动输入验证码
r = s.get(captcha_url, params = {'r':random.random(),'type':'login'})
open('captcha.gif','wb').write(r.content)
然后生成post data 加上headers post到http://www.zhihu.com/login/email就行了 服务器会返回一个json格式的数据 若'r'为0则登陆成功 若为1 可以查看'msg'得到登陆失败的原因
2 爬取想要的数据2.1 获取异步加载信息
登陆成功后 找到关注页面 发现只显示20个关注的人 接着向下滑动 又加载了20个 这里采用了异步加载需要得到异步操作返回的信息 然后和刚刚一样 查看NetWork的信息 选到XHR选项页


我总共关注了139人 分成7次异步加载 最后一次offset为139判断为结束 这些post数据的格式基本都一样只是offset标识每次加载关注人的起点 然后这里第一次出现了hash_id 大概是用来唯一标识用户的 所以再去搜索网页源码

有4个地方有这个源码,随便找一处解析出来就行了
def get_user_hash(text):
soup = BeautifulSoup(text, 'html.parser')
json_data = soup.find('script',{'class':'json-inline', 'data-name':'current_people'}).get_text().split('"')
return json_data[7]
需要注意的是每个用户的user-hash是不同的 所以在不同用户的关注人页面需要重新解析一次user-hash
这里我用广度搜索的策略收集用户信息 以我为种子 得到我的关注者的id 然后再用他们的id得到他们的关注者 结束条件为记录用户数大于10,000
不过这个数似乎太大了 大概到4W多的时候已经有很多重复的了(添加失败) 而且有时广度搜索期间会卡住 我已经设置了全局socket的timeout为5s而且还没用到多线程 所以不知道为什么会卡住
代码仅仅是实现了功能 没有考虑代码的规范和异常处理 也没有注释 仅做分享 今后再解决卡住的问题和实现多线程
最后分享下代码 代码传送门
if 有课
{
滚去上课
}
else
{
刷保研论坛
背单词
刷题
搞技术
玩游戏
}
- 上一篇: Python默认调用路径
- 下一篇: Python模块调用方式详解
相关文章
-
Python默认调用路径
Python默认调用路径
- 互联网
- 2026年04月04日
-
python内置函数
python内置函数
- 互联网
- 2026年04月04日
-
python内置数据类型
python内置数据类型
- 互联网
- 2026年04月04日
-
Python模块调用方式详解
Python模块调用方式详解
- 互联网
- 2026年04月04日
-
python命令行解析工具argparse模块【3】
python命令行解析工具argparse模块【3】
- 互联网
- 2026年04月04日
-
Python命令行解析argparse常用语法使用简介
Python命令行解析argparse常用语法使用简介
- 互联网
- 2026年04月04日






