我是如何使用 webBee 分析知乎 20w 用户数据的

本贴最后更新于 2943 天前,其中的信息可能已经物是人非

首先说一下我使用的工具:
项目地址: https://github.com/pkwenda/webBee

webBee是我为了深入学习而写的一个爬虫框架,新生儿1个月,但我打算一直做下去 首先我需要数据来测试修改我的框架啊,我想到了知乎的用户数据就是一个非常好的免费资源,不过想‘偷’知乎大大嘛... 还是要费点心思的。随便找了个知乎网红 (QaQ 美女学霸有木有!)

在这里呢,介绍一下我的框架

他是一个垂直爬虫[只针对单个网站的深入爬取]不是类似百度、google的爬虫引擎 因为还没完全开发完,暂时还没有上传到maven中央仓库,不过大家可以下载项目用maven build个jar包拿来用 目前正在完善core核心包和redis插件包

当然你也没必要写这么多,随便写写就行主要是cookie 这些东西相信用过postman 或者 Paw等web接口测试工具的童鞋很熟悉了 [ps:这部分其实有很多优化的部分,我下一步要不算的自动随机模拟useragent、代理ip等。防止反扒网站很容易抓到我们] 最主要的其实是cookie,这部分我原来其实是实现的 你利用Jquery的语法来选择 user-password的from表单进行登录的。 但是,因为目前web端五花八门而且提高用户门槛被我放弃了。一律cookie。

设置 cookie 的两种方式:

setting.setCookies(key,value).setCookies(key,value)..... //可以链式调用哦 setting.addHeader('cookie','value') //你可以一次写完也可以链式

那么有些小白童鞋就会问了怎么看网站 cookie 呢?

我们主要讲一下那些 cookie,是知乎是认为你必须携带的?我们分析下知乎发送的包

知道了吧,这可以当做有效期内的密码来用

webBee 你的方法只需要实现 PageProcessor 接口即可灵感来自 servletwebMagic 的面向接口设计。

public class FetchZhihu implements PageProcessor @Override public void process(Page page) throws IOException {... //用来获取结果的 @Override public Setting getSetting() {... //用来设置请求的[header/cookie/下一页等]

比如在 process 里面

page.getApi(); //这样就拿到了返回的数据 private RedisSet redisHash = new RedisSet(); redisHash.insert("zhihu_user_yet",page.getApi());//这样就完成了redis的缓存、持久化。

类似笔者巴拉巴拉一顿逼逼,开它两三个线程先来 20w 玩玩

【ps:多线程代码没测试完还没提交到github,汗。。。】 踩过的坑: 1、爬的太快被知乎封号24小时(建议大家用小号) 2、知乎不定时会对频率快的进行延时(已处理) 3、建议模仿用户行为早中晚各2个小时【这部分我会再写定时任务插件】

我自己 3 个线程[线程有最佳线程算法的哦,不要以为越多越好],不到 4 个小时后到手 20w

我使用 redis-dump 插件导出 json 文件,放在我那个 7 元一年的静态仅能运行 html 和 js 的,200mb 硬盘的,无敌屌丝服务器上跑 20w 数据,json 文件都达到 115mb,跑了 3 分钟,汗....

下面我们随便写写 js,简单分一下 20w 用户的男女比例和粉丝比例分析:
【动态图怎么传上去变静态的了!哭,重新截图吧】



对你发现了么?没错,我忘了知乎有 4w 不男不女了!!

下面粉丝分析:
10000+ 粉丝 422 人

1000-10000: 1630 人

剩余的大家自己看吧。


我倒是真没想到,我那么垃圾的服务器还能跑 20w 数据,哈哈哈哈哈哈

大家可能会有顾虑了,webBee 只能 redis?当然不是,考虑数据量方面我先弄 redis,当然我不提供插件大家也可以用 jdbc 、jpa、Mbatis、之类的,但是我会提供更简单的 mysql、mongod 等持久化操作插件,后续效果好可能会提供 elasticSearch 插件,但是涉及到工作量,还是希望大家多多参与贡献啦。

webBee 还有茫茫多的事情要处理,还会集成 htmlunit 等分析异步网站,监听弹幕网站等接口。

赶快给我点赞吧!0.0

项目地址: https://github.com/pkwenda/webBee

java 开源讨论群:147255248

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖 • 1 关注
  • webBee
    2 引用 • 11 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖 • 1 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 29 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 749 回帖
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 31 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 2 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    7 引用 • 27 回帖
  • gRpc
    11 引用 • 9 回帖 • 92 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 396 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 650 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 670 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    195 引用 • 291 回帖 • 373 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 257 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 76 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 337 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 5 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 158 关注
  • 反馈

    Communication channel for makers and users.

    121 引用 • 907 回帖 • 273 关注
  • OneDrive
    2 引用
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    181 引用 • 821 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖 • 1 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 122 关注
  • 叶归
    8 引用 • 38 回帖 • 18 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 183 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖