知乎爬虫(一)

2023-11-11

项目github地址:https://github.com/Lee-Jiazheng/zhihu_spider

知乎作为一个内容平台,有大量的新奇内容值得我们爬取,承受前人诸多知识,所以也写点东西为初学者提供一个学习的途径。

 

爬虫,就是在一张大网上不断地爬取信息,刚开始我们只有一个小点,也称为种子,从这个点逐步扩张,成为一只大网,所以爬虫就是一张结网的蜘蛛。

所以我们先到知乎的发现页,方便我们搜索,https://www.zhihu.com/explore。现在要思考我们的任务,假使我们想要爬取知乎所有用户的头像吧,这样涉及到的技术可能会更多,所以我们的程序应该以用户为核心,那么在搜索框中搜索一个“大V”,不懂大V是什么,我权当是粉丝比较多的人好了,程序员应该都会关注很多程序员,所以粉丝比较多的人vczh就成为了我们的目标,就从他开始下手好了,进入他的主页,点击他的关注者,发现有六十万人左右,从url也可以发现:https://www.zhihu.com/people/excited-vczh/followers,中间的excited-vczh不知道是什么,但我们应该是知道知乎是允许重名用户的,那我们猜测这应该是访问用户主页的url就是这个了,点击以后,发现了所有的关注者是分页的,那这样就轻而易举了,正则表达式解析我们下载下来的html,不就可以获取他们头像的url了吗,简直太容易了!所以查看源代码,编写正则表达式,下载。

然而,(假设你已经尝试过了),我们发现每次只能下载三个用户,好生奇怪,明明20个用户都在Html源代码里面啊,所以我查看了一下,通过python代码下载的html,惊奇的发现只有三个用户!这样就显而易见了,知乎关注者是通过js异步加载的(ajax),那么我们只要找到这个ajax岂不是就大功告成了?

所以开始寻找这个ajax。

按F12,在这个面板Network中,选择XHR筛选,发现有几个可疑的请求,


看到followers?...,估计就是他了,看看返回了什么数据,


正是我们想要的关注者数据!get it!那么再仔细看一下这个请求:

https://www.zhihu.com/api/v4/members/excited-vczh/followers?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=20&limit=20

到底是什么鬼,完全看不懂,但我们看到有两个单词offset和limit,可能就是分页显示的意思吧?每次显示20个,那么offset=40不就是第三页了么,可以点击一下看看到底是不是这样,所以标注一下,在后面尝试一下只加offset和limit参数是否可以。

在浏览器中打开这个url,发现返回的数据竟然是error:

{"error": {"message":"\u8bf7\u6c42\u5934\u6216\u53c2\u6570\u5c01\u88c5\u9519\u8bef","code": 100, "name":"AuthenticationInvalidRequest"}}

是认证无效请求,说明这个Url并不是随便就可以访问的,需要一个认证授权。但我也没登录,怎么认证呢?可以保存信息的几个地方就是Cookie和Hearders呗,但我估计hearders的概率比较大。


终于在headers找到了,但是否管用就是后话了,至少找到一个解决方案,事实上我是在调用api发现不好用的过程中,才找到这个authorization的。


所以获取数据的方法我们都找到了,下一步就是编码了,程序员总是乐观的,我们寄希望于所有的想法都是好用的,但一个bug就够调试一天了,所以下一篇再继续讲编码吧,我的运行环境是python3.5。

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

知乎爬虫(一) 的相关文章

随机推荐

  • Python显微外周血细胞图像增强颜色变换4种多层感知分类器

    显微外周血细胞图像数据 正常外周血数据集包含总共 17 092 个单个细胞的图像 这些图像是使用分析仪 CellaVision DM96 采集的 所有图像均在颜色空间 RGB 中获得 图像的格式和大小分别为 jpg 和 360 363 像素
  • 敏捷方法论的前世今生- 敏捷历史,敏捷宣言与敏捷12条原则

    敏捷方法论的前世今生 敏捷方法的历史 敏捷一词来源于2001年初美国犹他州雪鸟滑雪胜地的一次敏捷方法发起者和实践者 他们发起组成了敏捷联盟 的聚会 迭代和增量开发方法最早可以追溯到二十世纪三十年代非软件项目 二十世纪六十年代美国航天局水星计
  • vc中如何获取打开文件名

    在编制程序的过程中 很多时候我们需要从外部存储器中获取文件名 如果你知道文件路径 那很容易解决 但是不知道文件路径的话 怎么办呢 其实答案地球人都知道 那就是vc提供的 打开文件对话方块 怎么使用它呢 请看代码 include
  • JS实现Excel表格数据的导出

    方法一 js实现 Vue2 3都可以实现 首先需要2个JS文件 文章下方会给出 或者这俩个js搜一下应该都有的 页面2个按钮 data数据 JS如下 先点击模拟发送请求 再导出数据结果如下 实现多层结构导出 完整代码
  • docker常用应用部署

    docker相关的应用部署的总体步骤 步骤1 获取对应镜像 步骤2 生成容器 外部是不能直接访问容器数据的 但是可以通过容器跟主机间的端口映射来间接访问容器数据 所以必须要带上 p参数 格式为 p 主机 宿主 端口 容器端口 外部设备可以通
  • 傻白入门芯片设计,一颗芯片的诞生(九)

    CPU生产和制造似乎很神秘 技术含量很高 许多对电脑知识略知一二的朋友大多会知道CPU里面最重要的东西就是晶体管了 提高CPU的速度 最重要的一点说白了提高主频并塞入更多的晶体管 由于CPU实在太小 太精密 里面组成了数目相当多的晶体管 所
  • 邮件系统市场行情分析

    前言 随着网络信息化的不断发展 邮件系统也日益成为企业对外沟通交流的重要工具 成为了企业的刚需 随着邮件系统技术的不断完善与发展 企业对于邮件系统功能的也提出了更高的要求 市面上逐渐诞生了众多的品牌和厂家 不同的厂家在系统的功能特点以及售后
  • Zookeeper集群设置一键启动/一键停止脚本

    学习目标 设置一键启动 Zookeeper 脚本 设置一键停止 Zookeeper 脚本 设置一键启动 Zookeeper 脚本 进入目录 cd export servers zookeeper 3 4 5 cdh5 14 0 bin 编写
  • VUE3【学习三】:setup方法,三个插槽的使用及区别,父子组件传值

    一 setup是vue3新出的一个配置项 组件中的所有方法 数据等都可写在setup里面 并且比beforeCreate和created这两个生命周期还要早出现 这就出现一个问题 即里面this打印出来为undefine 找不到了 所以以后
  • C/C++:01. C过渡到C++

    文章目录 前言 1 C 和C的历史渊源 2 C 中的 class 和C中的 struct 3 C 命名空间 名字空间 详解 3 1 namespace 是C 中的关键字 用来定义一个命名空间 语法格式为 3 2 namespace 的使用规
  • 时序预测

    时序预测 Python实现CNN SVM卷积支持向量机时间序列预测 目录 时序预测 Python实现CNN SVM卷积支持向量机时间序列预测 基本描述 模型描述 程序设计 参考资料 基本描述 Python实现CNN SVM卷积支持向量机时间
  • React09——使用脚手架编程

    使用create react app创建react应用 react脚手架 xxx脚手架 用来帮助程序员快速创建一个基于xxx库的模板项目 包含了所有需要的配置 语法检查 jsx编译 devServer 下载好了所有相关的依赖 可以直接运行一
  • 求解:AttributeError: module ‘requests‘ has no attribute ‘args‘解决方法

    运行id request args get id 报错 解决办法 导入 from flask import request 我搜了一下 好多都没有解决办法 问题解决了的小伙伴动动发财的小手给点点赞吧
  • python 从CSV文件中读取数据并画日期折线图

    python 从CSV文件中读取数据并画日期折线图 代码环境 python 3 7 PyCharm 2019 1 1 问题描述 用pandas read csv读取文件中的数据后 希望以第一列 时间 为横轴 以第五列 数字数据 为纵轴画出日
  • 关于ADC_NbrOfChannel与ADC_RegularChannelConfig

    ADC NbrOfChannel是设置要转换的总通道数 ADC RegularChannelConfig 是配置各个通道 里面的第2个参数是你的通道名 第3个参数是这个通道名的转换顺序号 就是转换顺序怎么定义的 就是在第3个参数定义的 例
  • python依赖管理工具

    python依赖管理方案 pip作为python默认的包管理工具 提供了在线安装python依赖包的工具 但是内置的pip freeze默认打包整个机器上的python依赖环境 不太友好 下面简单介绍4个常用的依赖管理工具 pip pip
  • xpath定位元素方法_前端css基础篇(三) background背景元素position定位以及清除浮动的四种方法...

    一 background背景元素 1 background color背景颜色 可以简写 background 默认值是transparent 透明 不能继承 2 background image背景图片 可以简写background ur
  • 背包问题动态规划

    1 01背包问题 有N件物品 背包容量为V 第i件物品占容量c i 价值是w i 求装入哪些物品背包的价值最大 每个物品只能放一次或零次 动态规划思想很简单解决 用一个数组f i v 来表示前i件物品 容量为v的最大价值 那么推出转移方程f
  • 内存泄漏的场景

    当然可以 以下是每个场景的详细例子以及解决方法 未被释放的全局变量 例子 function leakMemory globalVar new Array 1000000 join leakMemory 解决方法 使用var let cons
  • 知乎爬虫(一)

    项目github地址 https github com Lee Jiazheng zhihu spider 知乎作为一个内容平台 有大量的新奇内容值得我们爬取 承受前人诸多知识 所以也写点东西为初学者提供一个学习的途径 爬虫 就是在一张大网