#Python爬虫QQ空间好友说说
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import re
def startSpider():
driver = webdriver.Chrome(executable_path=r'C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\Scripts\phantomjs-2.1.1-windows\phantomjs-2.1.1-windows\bin\chromedriver.exe') #这个是chormedriver的地址
driver.get('https://qzone.qq.com/')
driver.switch_to.frame('login_frame')
driver.find_element_by_id('switcher_plogin').click()
driver.find_element_by_id('u').clear()
driver.find_element_by_id('u').send_keys('xxxxx') #这里填写你的QQ号
driver.find_element_by_id('p').clear()
driver.find_element_by_id('p').send_keys('xxxxx') #这里填写你的QQ密码
driver.find_element_by_id('login_button').click()
time.sleep(2)
#f = open('E:/QQ.csv','w',encoding='utf-8')
#---------------获得g_qzonetoken 和 gtk
'''
注意!!!!!!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
--Vision_Tung
2018年10月25日
'''
gtk=getGTK(cookie)#通过getGTK函数计算gtk
print(g_qzonetoken)
print(gtk)
#--------------获得好友列表 注意下面的链接
'''
注意!!!!!!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
--Vision_Tung
2018年10月25日
'''
begin = 0
last_source = ""
tag = 1
first = 0
firstTime=""
for key in numList.keys():
QQnum = key
QQname = numList[QQnum]
begin = 0
first = 0
while tag==1 :
#-------------进入好友说说页面
'''
注意!!!!!!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
--Vision_Tung
2018年10月25日
'''
'''
注意:爬虫不是黑客!!!!
还是要有权限的!!!
'''
#检测是否没有权限访问
'''
注意!!!!!!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
--Vision_Tung
2018年10月25日
'''
#解析JSON
#webDriver没有现成的JSON解析器,所以采用获取源码的方式,然后使用正则表达式获取具体细节
'''
注意!!!!!!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
--Vision_Tung
2018年10月25日
'''
#说说动态分4种:1、文字说说(或带有配图的文字说说)
# 2、只有图片的说说
# 3、转发,并配有文字
# 4、转发,不配文字
for text in msg_list_json:
# 1、先检查说说,用户是否发送了文字,如果没有文字,正则表达式匹配无效
'''
注意!!!!!!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
--Vision_Tung
2018年10月25日
'''
# 2、如果作者说说有文字,那么检查是否有转发内容
'''
注意!!!!!!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
--Vision_Tung
2018年10月25日
'''
#合并发送内容 格式:评论+转发内容
if msg_time2!=[]:
msg = msg +" 转发内容:"+str(msg_time2[0][0])
else:
# 3、说说内容为空,检查是否为 =>只有图片的说说 or 转发,不配文字
#获取正文发送时间 (发送时间分为:正文发送时间 or 转发时间)
abtract_pattern = re.compile('"conlist":null,"content":"","createTime":"(.*?)",',re.S)
msgNull_time = re.findall(abtract_pattern,str(text))
if msgNull_time!=[]:
#如果有正文发送时间,那么就是这条说说仅含有图片 =>只有图片的说说
msg = "图片"
sendTime = str(msgNull_time[0])
else:
#如果没有正文发送时间,那么就是说这条说为 =>转发,不配文字
abtract_pattern = re.compile('\}\],"content":"(.*?)"},"rt_createTime":"(.*?)","',re.S)
msg_time = re.findall(abtract_pattern,str(text))
msg =" 转发内容:"+str(msg_time[0][0])
sendTime = str(msg_time[0][1])
# f.write('{},{},{},{}\n'.format(str(QQname),str(QQnum),sendTime,msg))
print(str(QQname)+" : "+str(QQnum)+" : "+sendTime+" : "+msg)
begin = begin + 40
def getGTK(cookie):
'''
注意!!!!!!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
此块细节已影藏!!!!
--Vision_Tung
2018年10月25日
'''
startSpider()
print("OK")
####总结分析:
####日后改进 计划:
注:如有不足,请斧正。