Crossin的编程教室

标题: 最近知乎的api发生了变化, 无法获得dict数据了, 求助. [打印本页]

作者: anyone    时间: 2022-1-25 19:23
标题: 最近知乎的api发生了变化, 无法获得dict数据了, 求助.
本帖最后由 anyone 于 2022-1-25 19:24 编辑

api的地址似乎没有变化,

地址还是:
  1. https://www.zhihu.com/api/v4/questions/{问题号码}/answers
复制代码
cookies 我一直是直接拷贝 chrome network中的cookies, 做一些简单的处理, 让其变成dict, 然后传入requests

头部使用:
  1. {
  2.                         'Host': "www.zhihu.com",
  3.                 'Origin': "http://www.zhihu.com",
  4.                 'Pragma': "no-cache",
  5.                 'Referer': "http://www.zhihu.com/"
  6.                 }
复制代码
以前这样就能爬出他的答案数据了. 可是从这两天开始, 就不行了, 总是反馈:
  1. {"error":{"message":"请求参数异常,请升级客户端后重试","code":10003}}
复制代码
我在chrome的inspect中是可以看到答案数据的. 但是python中就不行.  
也尝试了将chrome的完整头部传输到requests中, 也是同样的错误提示?

似乎他们做了防爬处理? 请大神帮忙看看, 还有没有可能爬出答案?

非常感谢.




作者: anyone    时间: 2022-1-26 16:32
我对比了一下chrome里面的request, 发现:

如果是在同一个登录窗口中, 每次不同页面的请求会有一个头产生变化:

"x-zse-96" 和  "x-zst-81":

如果是换了一个未登录知乎的窗口, 问题也能正常显示, 但请求头除了上面两个发生变化之外, 还有下面两个也变了

"x-ab-param" 和 "x-ab-pb"

上述的4个头参数的值都是类似口令似的无规律的,

请问这些头是怎么生成的呢?
如果不方便案例分析, 不知道哪里可以有相关教程我可以自己学习一下?

感谢.



作者: crossin先生    时间: 2022-1-26 21:43
请问这些头是怎么生成的呢?
---------
通常两种可能:
1.是根据已有的数据,通过某种规则计算出来。这个计算的代码在前端js里,理论上来说可以被找到并仿照实现
2.是每次后台提供的。这种情况也可以找到对应的数值或者请求,仿照同样的方法进行模拟
难点是如何从页面的大段代码里找到这个数据的来源。
这个需要前端,尤其是JS的经验。chrome开发者工具可以打断点的,可以搜索及学习下如何分析前端js代码(这是个技术活+辛苦活)

从实用角度来说,一般知名网站的接口,网上大多会有分析,去搜一搜可能会找到。但如果接口是刚刚改的,可能不太能找到,因为大家都还在学习中

但这种都是有赖于经验,再加上花精力去分析,没有固定的套路,每个网站用的方法都不会完全相同,所以也就没有一个可以直接照搬的教程(除非别人针对某个版本写好了)

作者: anyone    时间: 2022-1-26 22:22
感谢你的回复, 其中2种可能的总结给我了一些思路. 不过我是个编程小白, 勉强用用python的浅显功能, 估计暂时还达到不了做这个事情的水平.

目前我也在想另外一个思路, 有没有headless的浏览器, 在其中模拟滚动页面, 直到页面底部. 然后在html中萃取需要的数据.

不知道 @crossin先生 有什么可以推荐的headless的爬虫方案吗? 万分感谢.
作者: crossin先生    时间: 2022-1-26 22:27
selenium,可以设置headless模式
作者: crossin先生    时间: 2022-1-26 22:29
你的思路挺好,包括前面对api变化的分析,看起来不像是个编程小白
作者: anyone    时间: 2022-1-27 01:43
本帖最后由 anyone 于 2022-2-26 15:35 编辑

找到了几篇讨论这个事情的文章, 留此存档.

最新!Python爬虫爬取知乎文章内容(解决最新js反爬2021.8)_酒鬼考拉的博客-CSDN博客_爬虫爬文章
https://blog.csdn.net/weixin_51962852/article/details/119536986

有读者让我爬逼乎,是我大意了...(2021年知乎最新爬虫)_Kuls-CSDN博客
https://blog.csdn.net/qq_3654753 ... c_relevant_antiscan

新版知乎x-zse-86加密破解分析_一只不会爬的虫子-CSDN博客
https://blog.csdn.net/weixin_40352715/article/details/107546166






欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5