从入门到放弃之基于个人微博公共事件检测算法的研究与实现

  2018 年 1 月 11 日,项目启动。

  毕设选择了这个题目,水平大概就是边做边学吧。当我注册了微博开放平台,下好了Java SDK 搞了半天之后,才仔细一看,发现这是 4 年前的,或许能凑活着用吧。但这都不是重点,问题是第一步咋就 GG 了... ...

  为什么我搞好了之后运行 OAuth4Code 之后,提示:错误码:21322 重定向地址不匹配,将高级信息里的授权回调页改成官方默认的 https://api.weibo.com/oauth2/default.html 配置里边也改了,依然报这个错,而且也没有如网上所说的出来登录界面啊,这个报错是不是应该在登录之后哦?带着疑问我继续摸索中... ...

  经过摸索,没出现登录界面应该是我用的浏览器已经登录过微博了,所以直接到了授权界面,然后 redirect_URI 可能由于我的误操作导致不一致,所以报错。大致理由便是... ...编译之后的配置文件 config.properties 也会在 bin 的目录中,当修改了其中的 redirect_URI 参数时,并不能直接运行得到修改后的结果,我的做法是删掉 Project ,修改对应参数并删除 bin 目录,在 eclipse 中再重新导入 Project ,总感觉不该这么操作啊,只能用笨方法了。最终总算是能获取 token 了,还有便是官网修改了授权回调页虽然说是立即生效,但好像也有一定延迟吧。一切都妙不可言,或许是因为我第一次配置的时候不小心导致两头不一致吧。不过还是亲身说明这古老的SDK还是能成功授权的,这波不亏。

──2018-01-11

  

  乐极生悲,天又无绝人之路。

  测试了 ShowUser 和 CreatComment 两个方法,一切正常。但当我调用 timeline 下的 UpdateStatus 方法时,报错 10014 ,经查阅为“应用的接口访问权限受限”,所以没有发送微博的权限。本来以为可以实现获取数据的功能了,结果折腾了很久,才在官方API http://open.weibo.com/wiki/2/statuses/user_timeline 发现接口升级后:uid与screen_name只能为当前授权用户;瞬间感觉绝望... ...于是乎呢,我在合作接口里申请了接口,不知道有没有下文,但是又不能坐以待毙,又找了其他获取数据的方法,总算是找到一个 python + selenium 的方法:

  [python爬虫] Selenium爬取新浪微博内容及用户信息: http://blog.csdn.net/eastmount/article/details/50720436 

  python 我是有一点了解的,至于 selenium 嘛,开始学习吧。原文中给的代码部分已经过时了,而且我是用的 python3 ,所以做了一些改动。还有原文中5楼的评论也很重要,虽然我是用的 pycharm ,但也有所帮助。好了,找了两条路,但是总觉得微博官方 API 基本怕是凉了,所以准备好用第二种方法收集数据吧。

──2018-01-12 

 

  经过四五天的学习,爬虫基本实现。

  参考了《[python爬虫] Selenium爬取新浪微博内容及用户信息》,终于写出了能跑起来的爬虫,并将数据写入 MySQL 数据库。

  现在用的火狐浏览器,后期应该还是换成无界面浏览器吧,据说效率会更好一点。python 连接数据库,我用的 pymysql ,由于微博内容的特殊性,存在一些特殊符号,所以数据库采用 utf8mb4 编码,python 中初始化数据库连接时也要设置为该编码,pymysql 默认编码为(DEFAULT_CHARSET = 'latin1'),如下:

  db = pymysql.connect(host="localhost", user="root", password="root", db="db_name", charset='utf8mb4')

  否则,可能会报错: Error: (1366, "Incorrect string value: '\\xF0\\x9F\\x99\\x89\\xF0\\x9F...') 修改之后,保存特殊符号不报错了,但会将🌰显示为�,不知道有没有其他方式,现目前只能这样了。

  还有值得注意的是,一开始以为每页都会是 10 条微博,直到我测试时发现在中间页数居然存在只有 9 条微博的情况,应该是这个原因导致爬取的微博数量与显示的微博数不一致。还有一件事,当文本信息中包含英文单引号 ' 时,会导致插入数据库时,SQL语句报错,故注意转义:

count = str.count("'") # count 最大替换次数
str = str.replace("'", "\\'", count)

  最后,不清楚的地方也还有很多,代码优化还有很长的路要走~~~

  但是获取数据的第一步任务算是粗糙的完成了~~~

  明天就是回家的日子了,两三天的路途,回家也得继续操作起来。开题报告、文献综述、文献翻译三个任务压在身上,最后一个寒假看来是相当充实了。

──2018-01-15 22:02

 

  回家到现在,纠结于完全依赖 Selenium 会影响数据收集的效果,所以自己又苦心孤诣寻找别的方法,终于实现了一个基于 BeautifulSoup + Requests 使用 Cookies 获取数据的方法。在这个研究路上,我又通过 HTTP-API 使用酷Q将数据转发到 QQ 中,实现了微博自动转评赞的功能,一个是完全使用 Selenium 模拟浏览器操作,现在实现了一个通过 Selenium 获取 Cookies 之后,使用 Requests 库请求即可。

  后续研究及论文相关成果,欢迎访问 https://github.com/theprimone/prim

──2018-02-08 22:04

 

  几经周折,现在在一个项目外包的公司实习,用到Ext JS框架,3.4版本,简直可怕,最近一直在研究这个框架。现在回到毕设中来,现在看来时间好像有点紧了,那就不再去找 request 需要的网址接口了,直接使用 Selenium 框架操作无界面浏览器,虽然数据获取效率降低了,但是开发速度得到了提升,一来一去或许耗时也差不了多少,而且现在基于 Selenium 框架的代码已经有了,只是太烂了。现在已经在云服务器上执行获取微博热搜的 Python 脚本任务了,从2018年3月25日开始。剩下来的时间重点应该是要搞懂聚类算法的原理和分词工具的使用。穿插着优化一下获取微博数据的代码。现在看看至少要在四月底之前实现功能出来,哇,就一个月左右了,一大部分时间都用在实习上了。看来未来一个月是不平凡的一个月了_(:3J∠)_。

──2018-3-27 22:27

posted @ 2018-01-11 23:23  云深~  阅读(195)  评论(0编辑  收藏  举报