只是想统计某博主某一年内发布的全部微博,并计算转评赞总数,这么一个听起来非常简单的任务。没想到折腾了这么久。

首先是微博数据提供的付费功能,付费不说还只能统计近一年,不能任意指定时间段,比如在2020.4.11这一天只能统计2019.4.11~2020.4.11的数据,那岂不是每年得等跨年的时候才能统计去年数据了???

于是查到了微博API(https://open.weibo.com/),觉得甚是难用,不知道是不是只有我这么觉得,毕竟只用过百度、高德API,经验不足。首先创建应用,入口就找了半天。居然不在【我的应用】里而是首页像广告一样花里胡哨的按钮里。至于API接口,提供的一些基本的公开信息都需要通过授权,而且不知什么原因OAuth2.0授权失败了,看来没法通过官方渠道获取数据了,只能自己爬。

爬虫这坑看来早晚要填,目前还没学,也没用过,找了几段别人的代码更改微博ID后就无法访问,不知道是不是企业微博有保护之类的。

最后只好半吊子爬数据,用八爪鱼采集器了(https://www.bazhuayu.com/)。软件虽好用,也经过了一番折腾才搞懂里面种种设置。经历了无数次0获取和不完整的数据,最终的设定也许有些是不必要的,但这套设置确实能正确抓取数据了,也慢不了几分钟,就不去纠结了。本文记录了踩到的一些坑和最终成功的设定。

软件准备

免费下载、安装、注册,免费版功能就够用了,这个任务数据量不大,本地采集模式就可以了。里面提供了一些模板,其中也有微博的。

八爪鱼采集器中提供的微博数据采集模板

但微博最麻烦的地方在于登录操作,时不时还要输入个验证码,加上统计全年的任务需要大量滚动、翻页等操作,于是还是得用自定义任务,就不可避免要设定采集网址、采集流程、登录操作。

采集网址

采集网址的设定基本没有什么问题,只要在网址中找到需要更改的参数就可以了,存在多页的时候建议从网址来设定页码,靠谱一点,自动翻页我是怕翻错,而且微博一翻页就跳出让登录,所以自动识别总是能成功但开始采集却1条都抓不到。以我个人微博主页为例,查看2019年6月的博文(https://weibo.com/2772779897/profile?is_all=1&stat_date=201906&page=2#feedtop),发现时间轴被按月分割,6月发微博稍微多一点,出现了换页,于是需要修改两个参数,【月份】和【页数】。

个人微博截图

在八爪鱼采集器中,选择【批量生成】网址,在文本框中选中要替换的参数,点击【添加参数】进行设置。这里设定的两个参数,【月份】为01~12(软件提供【补零】功能,很贴心了),【页码】为1~4,因为这次要统计的微博每月不超过4页,这个要提前看好。

批量生成网址参数设定

自动生成了48个网址之后就可以【保存设置】,开始编辑任务。然后软件会打开第一个网址,并开始自动识别这一页的内容,并生成采集数据的结果,并给出操作提示,基本可信,不可全信。点击【生成采集设置】,自动生成采集流程的框架(毕竟比自己搭要靠谱),再去调整里面细节设置(就是这些细节折腾了好久)。

自动识别结果

采集流程

自动生成的流程图,基本框架没问题。

循环采集的基本框架

开始细节设定,【提取列表数据】没什么说的,删掉一些不需要的字段就OK。主要是【打开循环中的网页】,点小齿轮打开设置:

打开循环中的网页设置

【网页打开前】这里,怕加载不完全就打开下一页了,设定了等待3秒。(本来这里尝试用Cookie的设定绕过登录,但没有成功,而且获取当前页面Cookie的按钮也一直没反应,于是放弃。)【网页打开后】这里是一定要设定滚动的,一开始以为滚动2次就到底,后来发现不同页面还不一样,又设成了3次,间隔1秒同样是怕没加载完就跳过。

滚动设定这里纠结了很久,因为总是出现相同的错误,明明1个页面应该加载3次最终获得45条数据,结果执行的时候总是只抓到15条,没给滚。不知道是不是没登录的关系,还是网页打开前没有等待直接开了。

登录操作

为保证顺利完成多页爬取,还是绕不过要登录,不然一直会跳出提示登录对话框,什么也采集不到。讲道理微博登录是有cookie记录的,但放到软件的采集任务里就不行,每次开始都是全新的界面要求登录,转眼就不认得你是谁,折腾了各种手动登录都没法被记住。于是参考模板里的设定,在开始循环采集之前增加了登录操作,加入到流程图里老实执行。

在流程图中加入了登录操作

【打开网页】这里的网址就设定为微博入口(weibo.com),后面的操作设定其实是半自动的,在预览的网页里直接操作,点击对话框或按钮,【操作提示】里面就会出现相应的动作,可以记录下登录时的输入文本(用户名、密码)、点击元素等操作,模拟人的操作,并自动添加到流程图里,不过可能会在循环后面,需要手动拖动流程图里的方框,调整顺序,流程图搞好了就可以开始【采集】。

本以为这些都设定好了就可以了吧,账号密码也都记下了,总该能代替我先登录了吧。没想到,登录的时候,不是用户名没输进去就是密码没输进去,结果根本没登录上就执行下一步,开始循环了,还是啥也抓不到。这时候打开网页前的3秒等待似乎是起了作用,抓紧这3秒的时间,把自动操作没输进去的用户名或者密码手动输入进去然后立刻再点登陆,在打开要采集的主页前完成登陆,终于按照想的爬下了每页包含滚动加载的所有数据,大功告成。

最终完成采集

文章来源于互联网,如有雷同请联系站长删除:八爪鱼采集器自定义任务爬取微博数据

发表评论