做了一个新浪微博的爬虫,用的 casperjs+nodejs,遇到了一些问题想请教大家

2016-07-12 10:28:24 +08:00
 cheroky

自己无聊的时候做了一个微博爬虫,当初开始做的时候搜了很多功课,对于异步加载的内容,貌似模拟浏览是唯一的解决方案??于是我选用 casperjs 。虽然开发出来了,但是总结开发过程遇到这么几个问题。

1.微博很多大 V 发了条成千上万的微博,要是一直模拟下拉操作,浏览器界面越来越长,运行越来越慢,内存占用越来越高,测试过单个实例运行到大概异步加载 3000+条的时候,加载不动了。我不知道是内存不够了还是网络 io 问题,请问这个有什么解决方案吗?

2.casperjs 的并行处理。我当初想着能不能在一个节点中实现同时爬取微博,个人资料和粉丝。 casperjs 官网说并不原生支持,但是你可以创建多个实例试试看。于是我真的创建了三个实例。。。发现也可以跑。。。我想问有什么其他解决方案吗,我觉得我这样挺蠢得其实。。。

3.cluster 模块。我想用下 node 原生的负载均衡,但是 cluster 只能创建 nodejs 子进程。最初的想法是每个子进程再创建一个 casperjs 子进程,我是用 socket 作为进程通讯方式,就这样的话有多少 worker 我就得开多少端口,这种方案,我又觉得很蠢了。。。不知道有没有更好的解决方式

4.和谐问题。貌似新浪现在不用验证码卡人了,现在应该到了某个临界值,你模拟点击粉丝啊微博等页面,有很大可能会跳转到 http://weibo.cn/pub 这个页面,但是时机不定,虽然我写了跳转后校验 url 然后重连,但是有时候前一个页面所有的点击事件都会跳到这个网址,及其影响效率,但是不知道应该怎么防止跳转,开页面随机等待事件和一段时间后冷却我都有,但还是会有这种情况,不知道咋办。

3513 次点击
所在节点    JavaScript
1 条回复
Magic347
2016-07-12 18:24:12 +08:00
模拟浏览器下拉刷新页面并不是最优解,不过在数据采集中也不失为一种有效手段。
因为无限制的下拉刷新和重新加载页面势必造成系统资源的大量消耗,
当页面数据量过大时便会影响整个系统的采集效率。
理论上应该能找到获取页面数据的 ajax 请求,然后通过 hack 参数获取实际的格式化数据内容。
对于拉取数据的接口而言,往往都是有分页接口的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/291883

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX