网站调用新浪微博内容(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浏览器。你的网络监控太棒了!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线