几天前知乎上有人问我怎么爬知乎的异步加载页面,他得到的返回页面错误码是401,开始我以为他是参数传错了,因为记得之前爬知乎的时候遇到过,于是问他是不是参数没有传对,结果他说他把能传的都传了。
本来不打算爬的,今晚没事就试了下,用 Chrome
开发者工具很快就得到了第二页的ajax链接,在打开返回的 Json 数据的 paging 数据时发现了一个有趣的事
发现这里不仅有 next
,还有 previous
, 我这是就在想,在首页返回的 html
页面数据中是不是会有 next
这个变量呢?不然第二页的链接哪来的。
于是把首页的 html
数据复制下来,搜索 next
果然得到了第二页的 ajax
链接,于是我就直接请求这个链接,果然得到了 401
的错误码。
查看 Chrome
开发者用具得到的 ajax
链接的请求头,如上图所示,发现了 X-API-VERSION
和 X-UDID
两个参数,然后在首页搜索 X-UDID
没搜到, 搜索对应的值时,找到了 xUDID
这个 key
,于是用正则提取出这个值,将其加到 headers
中,请求之,结果还是 401
,于是我就有点不懂了,再去 Chrome
查看请求头,又找到 authorization
这个 key
根据意思,我就懂了 未设置验证方式
的意思了,于是在首页的 html
数据中查找这个数据,找到之后加到 headers
中,请求之,结果还是 401
,这下有点懵逼了。。。
再去 Chrome
查看请求头,发现 authorization
的值前面还有个奇怪的 Bearer
,于是在首页得到的 authorization
字符串前加上 Bearer
请求之,终于成功了!Excited!!!