网站调用新浪微博内容(id拼接成URL,访问用户微博列表了,怎么办?)
优采云 发布时间: 2021-12-16 22:12网站调用新浪微博内容(id拼接成URL,访问用户微博列表了,怎么办?)
由于新浪微博对开发者的严格限制,该界面一直无法获取指定用户的微博列表。无奈之下,写了一天爬虫工具,绕过API限制(无高级接口权限),终于拿到了用户的微博列表,分享过程:
第一步是模拟登录。新浪的登录比较严格。一次登录需要来自服务器的三个请求(可以用谷歌浏览器网络监控工具查看),并且用户名和密码的加密方式一直在变化,导致很多网络爬虫经常失败。. 我采取的方法是绕过模拟登录,直接在RequestHeaders中添加cookies。我如何获得饼干?只要正常登录,使用监控工具,找到一个界面,如下图,将cookie内容复制到RequestHeaders(请求的每一步都需要添加一个cookie,这是你是否登录的证明)
用户cookie
第二步调用新浪界面获取用户id,如2264520883
第三步,将获取到的id拼接成URL访问用户主页,抓取主页内容,截取用户微博主页page_id,如下图
page_id
第四步,将获取到的page_id拼接成微博首页URL(page_id=prefix user id),#feedtop,抓取网页内容,提取需要的元素。您只需要为每个分页更改 page 参数的值。
问题是,使用上述方法获取的微博数量仅占总数的1/3。为什么?第一个分页id从1开始,但是第二个分页id从46开始,这是因为微博加载中有两个ajax异步加载,异步加载的内容没有显示在网页上,也就是一共每页有 45 个数据,其中 30 个没有显示,我该怎么办?
第五步,通过网络监控工具,可以发现微博在异步加载时调用了如下接口
微博界面
有几个参数需要注意。domain是page_id的前缀,pre_page和page是当前页码,max_id是上一页最小的微博id,end_id是上一页最大的微博id(仔细看结论),count是微博的数量per pagination(固定为15),id为page_id,script_uri也收录page_id,拼接时需要注意,from=page_id前缀,最后一个参数__rnd要靠常识来猜测,是当前时间戳(代码写的太多,对数据太敏感)。
知道这些参数后,就可以开始爬取了。请注意,页面中有两个异步加载。经测试,已成功获取所有微博数据。
最后,给自己一个赞。辛苦一天也不容易。同时,非常感谢Chrome浏览器。你的网络监控太棒了!