Skip to content

Latest commit

 

History

History
43 lines (43 loc) · 2.3 KB

README.md

File metadata and controls

43 lines (43 loc) · 2.3 KB

ZhihuCrawler

徒手实现定时爬取知乎,从中发掘有价值的信息,并可视化爬取的数据作网页展示。项目目前正在开发,欢迎前来交流学习!

问题及解决方案

  • 日志 程序运行时统一初始化。由于logging应用了单例模式,之后可以直接使用配置好的logging
  • 第三方库版本管理 Pipenv,功能强大,方便易用
  • 代码版本控制 Git,使用.gitignore来忽略日志文件夹、vim临时文件、缓存文件文件夹
  • 配置管理 Yaml,可读性好,语法简单
  • 文件组织 将相同功能的文件放于同一文件夹下,*.py文件组织成包
  • 性能分析 使用自己定义的装饰器函数来测量函数运行的时间
  • 数据爬取 使用Selenium + Webdriver爬取动态网页,使用Requests库请求部分已有接口
  • 数据解析 Xpath,速度快,使用简单
  • 爬取标记 使用Redis存储已爬取的话题id及其下信息的摘要值,数据类型选取为hash
  • 数据序列化方式选取 Json,通用序列化方案
  • 摘要算法选取 MD5,选择原因见Hashing Algorithms In Python。此外经测试,base16速度仅次于MD5,base64次于base16,base32最慢;整体而言,直接加密'汉字'类型的字符串,比加密'\u6c49\u5b57'类型的字符串速度要快,因此json.dumps的时候ensure_ascii参数要设置为False
  • 数据持久化 MongoDB,时间类型数据统一存储为格林尼治时间
  • 定时任务 Flask-APScheduler,使用简单,轻量级方案,且支持多种数据库的持久化
  • 任务管理 Supervisor方便易用
  • 并发实现 Multiprocessing.dummy多线程,易于移植,方法简单
  • 话题树建立及展示
  • 网页展示 Flask框架 + Bootstrap-Flask
  • 话题关注人数及问题数可视化 使用Pyecharts 1.0,已基本实现(散点图显示异常,待观察)
  • 热门关键词爬取、处理及可视化 Worldcloud + Jieba
  • 获取访问页面的用户IP,并分析其所在区域
  • 统计访问每一个页面的用户数量
  • 页面数据使用Redis做缓存,避免加载可视化数据时都要进行计算的问题