文章目录
项目背景、目的和意义
随着科学技术的不断发展,互联网进展的不断加快,人工智能、大数据和云计算等新兴技术的不断涌现,目前每天都有上亿的数据在网络中流通。而人工收集数据的发法效率低,成本高。因此,本项目利用Python爬虫等技术,能够在数分钟内,实现自动登录QQ空间,抓取个人信息、好友列表、说说和日志等信息,同时能够及时对抓取的数据进行加密,保证了通信安全。本项目的成功实施,对办公自动化、信息检索、互联网信息安全等方面具有重要意义,同时加以GUI界面进行封装,提高了程序的普适性和交互性。
业务说明
启动程序后,提示用户可供选择的操作:
1.抓取信息:继续提示输入QQ号和密码(密码不能显示出来,用*号代替),然后登录QQ空间,抓取其中的①QQ个人信息;②好友列表;③说说和日志;把获取到的信息经过加密后存入csv文件中。
2.显示信息:用户输入QQ号码后,生成解密的csv文件,用户可查看:①QQ个人信息;②好友列表;③说说和日志;输入Quit或quit可以退出系统。
代码实现:
1.GUI_main.py用户界面,用于运行程序
每一次抓取,都会为当前QQ建立一个文件夹,方便分类收集QQ的QQ空间中信息。
如果重复抓取,则会提醒用户已经抓取过了,此时可以选择删除该QQ的文件夹重新抓取或者显示信息。
如果想查看未抓取的QQ,则会提醒当前用户还未抓取过信息,此时可以选择输入该QQ的面进行抓取
具体代码如下:
import tkinter as tk
import tkinter.messagebox as Msg
from directory import mkdir
import os
window = tk.Tk()
window.title('QQ空间,分享生活,留住感动')
window.geometry('450x350')
# 欢迎界面
canvas = tk.Canvas(window, height=500, width=500)
image_file = tk.PhotoImage(file='demo.gif')
image = canvas.create_image(0,0, anchor='nw', image=image_file)
canvas.pack(side='top')
# 用户信息
tk.Label(window, text='Q Q ').place(x=50, y= 200)
tk.Label(window, text='密码 ').place(x=50, y= 230)
tk.Label(window, text='加密/解密秘钥 ').place(x=10, y= 260)
var_usr_name = tk.StringVar()
var_usr_name.set('在这里输入qq号')
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=100, y=200)
var_usr_pwd = tk.StringVar()
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=100, y=230)
var_key = tk.StringVar()
entry_key = tk.Entry(window, textvariable=var_key)
entry_key.place(x=100, y=260)
var_key.set('请输入0-1000整数')
def get_all():
"""完成对内容的抓取和加密的过程"""
username = var_usr_name.get()
password = var_usr_pwd.get()
key = var_key.get()
file = username + "\\" + username + '_encrypted.csv'
# 为当前用户创建文件夹
if( not os.path.exists(username) or not os.path.exists(file)):
# *************************爬取信息的主程序
mkdir(username)
import ourmain
isSuccess = ourmain.main(username, password, key)
if isSuccess:
Msg.showinfo(message="信息已经抓取并加密完毕!")
else:
Msg.showinfo(message="账号或密码错误")
else:
Msg.showwarning(message="当前用户已经抓取过信息了!")
return
def show_all():
"""完成对内容的解密过程"""
username = var_usr_name.get()
path = username
key = var_key.get()
if(os.path.exists(path)):
# ********************显示信息的主程序
import decrypts1
file0 = username + "\\" + username + '_encrypted.csv'
file1 = username + "\\" + username + '_decrypted.csv'
decrypts1.save_file(file0, file1, key)
Msg.showinfo(message="信息解密完毕!")
else:
Msg.showerror(message="当前用户还未抓取过信息!")
return
pass
# 按钮
btn_get = tk.Button(window, text='抓取信息', activeforeground = "black",activebackground = 'blue',command=get_all)
btn_get.place(x=100, y=300)
btn_show = tk.Button(window, text='显示信息', activeforeground = "black",activebackground = 'blue',command=show_all)
btn_show.place(x=200, y=300)
btn_quit= tk.Button(window,text = 'Quit',activeforeground = "black",activebackground = 'blue',command=window.destroy)
btn_quit.place(x=300, y=300)
window.mainloop()
2.ourmain.py 工程主程序
# -*- coding: utf-8 -*-
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from login import login1 as login
from friends import friends_lis