#Python爬虫QQ空间好友说说
web
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种:一、文字说说(或带有配图的文字说说) # 二、只有图片的说说 # 三、转发,并配有文字 # 四、转发,不配文字 for text in msg_list_json: # 一、先检查说说,用户是否发送了文字,若是没有文字,正则表达式匹配无效 ''' 注意!!!!!!!!! 此块细节已影藏!!!! 此块细节已影藏!!!! 此块细节已影藏!!!! 此块细节已影藏!!!! 此块细节已影藏!!!! 此块细节已影藏!!!! --Vision_Tung 2018年10月25日 ''' # 二、若是做者说说有文字,那么检查是否有转发内容 ''' 注意!!!!!!!!! 此块细节已影藏!!!! 此块细节已影藏!!!! 此块细节已影藏!!!! 此块细节已影藏!!!! 此块细节已影藏!!!! 此块细节已影藏!!!! --Vision_Tung 2018年10月25日 ''' #合并发送内容 格式:评论+转发内容 if msg_time2!=[]: msg = msg +" 转发内容:"+str(msg_time2[0][0]) else: # 三、说说内容为空,检查是否为 =>只有图片的说说 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")
####总结分析:正则表达式
####往后改进 计划:chrome
注:若有不足,请斧正。json