QQ空间网络爬虫软件--qqzoneSpider

  • qqzoneSpider
    • 目录
    • 安装
      • 环境
      • Python版本
      • 相关库
        • 爬虫相关
        • 数据库相关
        • GUI相关
        • 可视化相关
        • 数据分析相关
    • 使用说明
      • 操作步骤
    • 原理
      • 爬虫原理介绍
      • GUI原理介绍
      • 可视化原理介绍
      • 数据库原理介绍
    • 结语

qqzoneSpider

an interesting spider program (with GUI)
for collecting your qqzone information or your qq friends’

这是一款有趣的爬虫程序,用于收集你或者你qq好友的空间信息

该爬虫的Github地址为:qqzoneSpider。本文为其README复制版。

目录

  • chart/ 存放可视化的结果文件(*.html)
  • db/ 存放数据库文件(*.db)以及账号信息文件(account.txt)
  • img/ 存放GUI的图片
  • intro/ 存放README.md中用到的图片
  • phantomjs-2.1.1-windows/ 存放phantomjs可执行程序
  • __init__.py 主模块
  • dbopr.py 数据库操作模块
  • spider.py 爬虫模块
  • visualization.py 可视化模块
  • stopword.dat 说说内容剔除字符串列表文件,来源垃圾短信词频统计,有所修改

安装

环境

Windows 10

Python版本

Python 3.7.1

相关库

爬虫相关
  • requests 2.20.0
  • selenium 3.141.0
数据库相关
  • sqlite3(python3.7自带,无需下载)
GUI相关
  • tkinter(python3.7自带,无需下载)
  • webbrowser(python3.7自带,无需下载,用于打开可视化的网页)
可视化相关
  • pyecharts 0.5.11(使用旧版,与新版完全不兼容,所以不要安装1.0版本)
数据分析相关
  • numpy 1.15.4
  • scikit-learn 0.20.3(线性回归)
  • jieba 0.39(中文分词)

Tip: 所有库可直接用pip install 库名==版本号进行下载

使用说明

操作步骤

  1. 安装好所有的依赖库

  2. 在控制台中切换目录至/qqzoneSpider/

输入命令,启动程序界面

python __init__.py

启动后的主界面如图所示

  1. 在“数据库名”后输入用于存储爬取的空间信息的数据库名称,只能用英文,而且一个数据库只能存储一个用户的信息,建议用待爬用户相关信息作为库名,如张三可以用zs作为库名,输入后点“创建”,会提示“创建成功!”

  2. 点击上方栏“爬虫”,进入爬虫界面。选择一个创建好的数据库,输入你的qq账号(会存储在文件中,避免今后重新输入),输入你的qq密码,输入你想要爬取的qq账号,点击“S1爬取说说”,爬虫开始爬取说说、评论数、tid、发表时间。如图

  1. 等爬取完毕后,再点击“S2爬取点赞数”,注意4和5步骤不能颠倒,因为5是根据4得到的说说进行点赞数的爬取!这样所有爬取工作就完成了。

  2. 点击上方栏“可视化”,进入可视化界面。先选择一个有数据的数据库,然后点击下方的图表,绘制完成会在chart/文件夹下生成html文件,并且在默认浏览器中自动打开该文件查看可视化结果。初步有7中图表可以选择,如果热力图可以输入想要可视化的年份,例如2018,也可以不输入,默认绘制当前年份。如图

  1. 如果想查看爬取的数据,可以回到数据库界面,选择数据库,再点击查看。如果想清除数据,则点击“清空”。

申明:

  • 该爬虫不存储、发送qq密码,仅存储qq账号以及爬取到的qq空间说说、点赞数、评论数、发表时间、tid。其中,爬取说说、评论数、发表时间、tid为同一个请求,一次获取20个结果,爬取点赞数为一个请求,一次获取一个结果。该爬虫仅能爬取本人或者本人qq好友的空间,对于本人不能访问到的空间是无法爬取的。
  • 如果登陆失败,可以先在浏览器中确认是否被封,如果没有被封,可以继续尝试。连接时长超过15秒自动取消,所以可能会误判为登陆失败。
  • 不使用软件时请及时关闭窗口,以免浪费线程资源
  • 该软件的设计初衷是用于学习、交流和个人娱乐,请勿滥用爬虫(长时间高密度地发送请求会导致空间被封),也不要用爬取的数据做违法、伤害朋友的事情!
  • “盗”亦有道 >_<

原理

爬虫原理介绍

qq空间页面不是一个静态页面,要获取信息需要动态获取。首先要模拟登陆,这里用到的是无界面浏览器phantomjs,利用selenium调用phantomjs.exe进行模拟登陆,从返回的页面中获取qzonetoken,从返回头中获取cookie信息,然后根据加密函数(spider.py get_g_tk())对cookie中的p_skey字段进行加密,得到g_tk参数。

接下来有两个核心的请求需要用到:

https://h5.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6

以及

https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/user/qz_opcnt2

第一条请求可以获取到说说的具体内容(con)、说说发表的时间戳(created_time)以及位置信息(lbs),都可以用来做一些相关的分析和可视化,但无法获取点赞数。这里提取content、cmtnum、tid和created_time。

第二条请求可以获取一些数值指标,例如点赞数、评论数、点赞的人等等。从数据库获取tid,根据它作为参数之一从第2条说说获取点赞数,再更新数据库,完成爬取。

详细的原理可以参考18年我写的博文通过Python爬取QQ空间说说并通过Pyechart进行可视化分析

GUI原理介绍

本爬虫用到的GUI库是python自带的tkinter,我也是刚学,发现非常容易,分享一个自己学习的时候建的repoTkinter-simple-demo。

学习链接来源Python GUI Examples (Tkinter Tutorial)

Tkinter官方文档

可视化原理介绍

可视化用到的是0.5版本的pyecharts,就是Echarts的python库,用法很简单,但要注意0.5和1.0版本完全不兼容,所以只能下载旧版的pyecharts才能正常使用本软件。

pyecharts0.5官方文档

界面用到的图表图片来自iconfont

数据库原理介绍

数据库用到了python自带的sqlite3,使用非常简单,可以参考sqlite3官方文档

结语

本想用pyinstaller打包成可执行文件,解决了大部分bug后最终被pyecharts的一些问题给打败了。这里写下打包过程遇到的问题(包括没解决的):

  1. 用网上的.spec打包方式打包,会出现 no module named typedef

原因: numpy版本过高

解决方式: --hidden-import sklearn.neighbors.typedefs

  1. 可以打包,运行绘图报错 jinja2.exceptions.TemplateNotFound

原因: 找不到对应模板

解决方式: 到pip安装的pyecharts文件夹(site-packages/pyecharts)下找到templates文件夹,把里面的html全都复制到可执行程序的目录下

  1. 绘制的html无图

原因: html没有引用相应的js文件

解决方式: 到网上下载echarts.common.min.js,放在可执行程序目录下,然后在simple_page.html和simple_chart.html中引用直接引用该js文件,注意相对路径

  1. 绘制heatmap和wordcloud缺少js

原因: 上面引用的js只是基本图像所需的,像heatmap和wordcloud引用的js不止这一个

解决方式: 试着把所需的js引用了,但是还是显示缺少js。头皮发麻,放弃了,如果有解决了告诉我一声。

自己动手写一个QQ空间网络爬虫--qqzoneSpider相关推荐

  1. 【从零开始写漏扫】服务识别—自己动手写一个指纹识别器—网络特征指纹

    前言 上篇文章中,我们讨论了端口扫描器的实现,编码实现了一个简单的多线程端口扫描器,从子域名挖掘到端口扫描,主机发现部分暂时结束了,今后遇到更好用的主机发现技术再作补充,接下来开始服务的识别工作. 通 ...

  2. 用html写一个QQ空间登录页面

    这是一个基本的 QQ 空间登录页面的 HTML 代码: <!DOCTYPE html> <html> <head><meta charset="ut ...

  3. 吕文翰 php,自己动手写一个 iOS 网络请求库(三)——降低耦合

    自己动手写一个 iOS 网络请求库(三)--降低耦合 2015-5-22 / 阅读数:16112 / 分类: iOS & Swift 本文中,我们将一起降低之前代码的耦合度,并使用适配器模式实 ...

  4. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

  5. python爬虫qq好友信息,GitHub - equationl/QQzone_crawler: QQ 空间动态爬虫,利用cookie登录获取所有可访问好友空间的动态保存到本地...

    关于 Edit by equationl 优先在 码云 上更新 该项目修改自 xjr7670 的 QQzone_crawler 原作者说明: QQ空间动态爬虫 修改了什么? 爬取完整的评论列表 爬取点 ...

  6. 【天善学院】自己动手,丰衣足食!Python3网络爬虫实战案例 附讲义与代码 6 A+所属分类:Python教程

    自己动手,丰衣足食!Python3网络爬虫实战案例 适宜人群: 萌新小白:我连爬虫也不知道是什么 入门菜鸟:我对一些爬虫的用法还不是很熟练 老司机:我想学习更高级的框架及分布式 从环境基础到进阶分布式 ...

  7. 自己动手写一个印钞机 第二章

    2019独角兽企业重金招聘Python工程师标准>>> 作者:阿布? 未经本人允许禁止转载 ipython notebook git版本 目录章节地址: 自己动手写一个印钞机 第一章 ...

  8. 动手写一个Caffe层:矩阵相乘Matmul

    动手写一个Caffe层:矩阵相乘Matmul 背景 实现 前向传播实现 后向传播实现 backward推导 小结 背景 最近在研究chainer网络的caffe实现,顺便也体验一下caffe.对于ca ...

  9. 自己动手写一个简单的bootloader

    自己动手写一个简单的bootloader 15年10月31日19:44:27 (一) start.S 写这一段代码前,先要清楚bootloader开始的时候都做什么了.无非就是硬件的初始化,我们想要写 ...

最新文章

  1. php get memory,PHP memory_get_usage 和 memory_get_peak_usage获取内存的区别
  2. struts(三)——struts框架实现登录示例
  3. Http:Get、Post、Put、Delete、Head、Options详解
  4. Xamarin.Forms弹出对话框插件
  5. 转载—android 媒体库数据更新解决办法总结
  6. 编写让别人能够读懂的代码
  7. 个类似GoogleMap的客户端JS开源库
  8. 保留正常工作的环境,等自己的搞好后再替换
  9. newifi3 高恪魔改_newifi 3 四大路由器固件优劣分析
  10. 390计算机毕业设计
  11. Android测速代码,Android应用测速组件实现原理
  12. 【ZZULIOJ】1097: 计算平均成绩(函数专题)
  13. 网络游戏客户端延迟处理
  14. HTML3-视频图像的插入
  15. 2种RamDisk的读写速度
  16. 6) 克莱姆(gramer)法则
  17. [附源码]Python计算机毕业设计SSM基于框架的报修系统(程序+LW)
  18. 计算机中乘法是什么函数,excl中的乘法函数符号是什么
  19. Docker-三剑客之machine、compose、swam集群、visualizer监控、stack部署集群、Portainer可视化
  20. [Unity3D] 2D像素游戏(二) 准备图像素材并认识预制件Prefab

热门文章

  1. 苹果App Store公布最新应用审核标准
  2. are exo exo是什么歌 we_EXO we are one
  3. 怎样练习10000小时
  4. 机器视觉系统之红外摄像机技术应用介绍
  5. js获取当前周和时间
  6. modelsim 仿真软件 百度云分享 questasim modelsim se 2019.2 10.7 10.6d 10.6c 10.5 10.4
  7. Ubuntu Kylin 麒麟 安装 ssh
  8. oracle 19c RAC 19.0升级到19.16
  9. linux下虚拟机开机重置修改密码,完整步骤
  10. 域控制器时代:ECU 的「消亡」与汽车「中央大脑」的重建