搬迁到语雀啦,地址在这,之后的更新都在语雀上了。
【更新】:2020.6.15添加了拓展程序-爬到沙发之后显示楼层号 的功能。
【声明:本文章的示例截图因为没有得到对方授权,所以作了马赛克处理。】
这篇文章讲的是小白在电脑的浏览器里怎么偷懒,自动翻wb评论到最早的评论。想直接看代码可以到另一篇博文。
原理
目前采用的方法为:每1秒自动点击“加载更多”按钮。
因为评论的接口只有这个肯定能爬到几万的数据,其它的接口只能加载50页。所以就每1s自动点击一次触发请求。在实际测试中,评论数目很多的时候,会遇到服务器返回数据错误的情况,解决方案是记录上一次的按钮数据,然后appendChild后再click触发请求,一般来说就会拿到数据了。
(其实这是最蠢的办法,但只找到种能稳定请求到评论。所以还是放出了这个办法。有能拿到50页以后数据的童鞋求告知 T^T)
使用方法简述
先上使用方法总结,以免读者你被篇幅劝退。(本文是面向小白,所以步骤写得细致,文章略长(╯‵□′)╯︵┻━┻图片多了点,考虑的情况多了点,都是怕小白遇到意外情况不知道该怎么办,所以才都列出来)
- 在电脑的谷歌浏览器里打开要爬楼的微博详情页。
- 排序选择按时间,并且将页面滚动到底部。
- 拷贝代码,回车,等待。或者 打开插件,点击开始,等待。
- 看到“找不到加载更多按钮,请看看是不是翻到沙发了”的提示,听到音乐响起,恭喜,翻到沙发了。✿✿ヽ(°▽°)ノ✿
可以看到步骤3有两种方式,是因为自动翻评论这里提供两种使用方式选择,两种的功能是一模一样的,只是用户的使用方式有所区别:
- 谷歌浏览器的拓展程序包
- 直接在浏览器的console控制台处复制代码然后回车
用1谷歌浏览器拓展程序的话,使用起来长这样↓,不需要打开控制台,更简单。但是需要下载文件包到本地,并且在谷歌浏览器里加载这个程序。使用文档在这篇文章里。
而通过2直接拷贝代码在浏览器里唤起开发者工具运行,无需任何下载,使用起来如下:
以上两种方法代码是几乎一样的,只是使用方式不一样,一个是点按钮,一个是在浏览器的控制台上输入命令回车。读者可以根据自己的喜好选用~
本文将以“2直接copy运行代码”版为例,讲述使用方法、原理、各种情况处理、注意项及预计耗时等,方法1的文档在这哦。
-----------------------------------------------------------------------------------------------------------------------------------
先上翻成功的样子,也就是我们今天的栗子:它当前有54900条评论,使用程序自动翻,每1s翻15条,一共翻了1800+次,即半小时,翻到了沙发。可以算出来大概27000条评论是直接评论当前wb的,其它都是楼中楼。所以看到评论数不要慌,实际上可能没有那么多。end处有根据多次测试得出的 楼层数-所需时间 参考曲线哦~
当你看到提示“找不到加载更多按钮”的时候,基本就是翻到沙发了。 (*╹▽╹*)
爬到沙发的样子长这样↓,不会有额外的内容的比如“加载更多”或者“还没有人评论哦快来抢沙发”,如果有就代表服务器出错了,看 补充功能-还没翻到沙发却停止了 解决这个问题。
而服务器出错,就像下图一样,有不应该存在的“还没有人评论”。
注意:此代码不适用于某些账户的wb,即点开某条wb详情页时带这个框的,因为代码没做兼容:
好了,那我们开始吧。
准备
浏览器
你需要在电脑上打开一个浏览器。推荐使用chrome(谷歌浏览器)或firefox(火狐浏览器)。下面用chrome作示范。
找到目标微博
在浏览器里打开wb,并登陆。
找到你要翻评论的那条wb,通过点击评论按钮展开评论列表,并在评论底部点击“查看更多”跳转到此条wb的详情页。
详情页页面大概长这样
按时间排序并将页面滚动到底部
改变排序,点击"按时间",然后滚动到页面底部,看见“查看更多”按钮。 注意,一定要在有“查看更多”按钮的时候才可以运行下面的代码,不然不起效果的。
代码
唤起开发者工具
在网页里敲一下键盘的F12,或者ctrl+shift+i,或者鼠标右键点击“检查”(firefox是“检查元素”),唤起开发者工具。mac好像是command + option(alt) + i。实在不知道,可以搜索“你的浏览器名 打开控制台”看看如何打开。
唤起后的界面如下:
打开控制台
点击console(firefox里可能叫“控制台”),进入控制台,那么你应该看到这样的画面:
运行代码
将以下代码拷贝后,在上图界面处粘贴,然后回车运行。
聪明的小伙伴肯定知道不能随便运行一段别人给的不明代码,万一cookie被拿到了岂不是会被盗取账户。所以在我的另一篇博文里我解释了每行代码干了什么,以尽量证明安全,因为篇幅太长所以单独开一篇~
var i = 0;
var audio = new Audio("https://t.cn/A6Ag3iqY");//这里是结束后播放的音乐链接
var getMoreButton = document.getElementsByClassName("WB_cardmore")[0]
var newGetMoreButton
var timeId
var stopFlag = 0
var listBox = document.getElementsByC