一、安装基础的软件包:

1、准备好火狐浏览器,并下载geckodriver,将geckodriver加入到环境变量:
下载geckodriver的地址:https://pan.baidu.com/s/1NDo04Zj8NxmlRe90_CDRow 2、下载selenium:
python pip install selenium

二、脚本说明:

from selenium import webdriver
from time import sleep username='xxxxxxxxx'
password='xxxxxxxxxx'
qzone_url ='https://qzone.qq.com/' '''qq空间自动登录登录'''
def login_qzone(url,username,password,browser_type='Firefox'):
if browser_type == 'Firefox':
driver = webdriver.Firefox()
elif browser_type == 'Firefox_headless': #用火狐的无边界浏览器
fireFoxOptions = webdriver.FirefoxOptions()
fireFoxOptions.set_headless()
driver = webdriver.Firefox(firefox_options=fireFoxOptions)
driver.get(url)
if 'qzone' in url:
pass
else:
driver.find_element_by_class_name('qzone').click()
sleep(5)
driver.switch_to.window(driver.window_handles[1])
#print(driver.window_handles)
driver.switch_to.frame('login_frame') #这个很坑,里面还包括子页面
pwd_login_button = driver.find_element_by_id('switcher_plogin')
pwd_login_button.click() #点击通过密码登录
input_user = driver.find_element_by_id('u')
input_user.send_keys(username)
input_pwd = driver.find_element_by_name('p')
input_pwd.send_keys(password)
login_button = driver.find_element_by_id('login_button')
login_button.click()
driver.switch_to.default_content()
sleep(5)
return driver if __name__ == '__main__':
login_qzone(qzone_url,username,password)

qzone_login.py

import qzone_login as login
from selenium.common.exceptions import StaleElementReferenceException,NoSuchElementException
from selenium import webdriver
import time
import json qq_number_dict ={} def save_qq_number(tag_list):
for line in tag_list:
qq_number = line.get_attribute('href').split('/')[-1]
qq_number_dict.update({qq_number:line.text}) '''得到qq空间里的所有好友,保存到文件里'''
def save_in_file():
qq_number_dict.update({'save_time':time.time()})
browser = login.login_qzone(login.qzone_url,login.username,login.password,browser_type = 'Firefox_headless')
#browser = login.login_qzone(login.qzone_url,login.username,login.password)
browser.get('https://user.qzone.qq.com/949885111/myhome/friends/index')
browser.switch_to.default_content()
frame = browser.find_element_by_tag_name('iframe')
browser.switch_to.frame(frame)
for i in range(60):
target = browser.find_element_by_class_name('qz-button.btn-pager-next')
browser.execute_script("arguments[0].scrollIntoView();", target) #屏幕转到qz-button.btn-pager-next类的标签
save_qq_number(browser.find_elements_by_class_name('textoverflow'))
target.click()
time.sleep(1)
with open('qq_friends.json', 'w', encoding='utf-8') as f:
f.write(json.dumps(qq_number_dict)) if __name__ == "__main__":
with open('qq_friends.json', 'r', encoding='utf-8') as f:
for line in f:
save_time =json.loads(line)['save_time']
if time.time() - save_time > 86400:
save_in_file()
else:
with open('qq_friends.json', 'r', encoding='utf-8') as f:
for line in f:
print(len(json.loads(line)))

get_friends.py

import qzone_login as login
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import ElementNotInteractableException,NoSuchFrameException,NoSuchElementException
import time friend_qzone_url = 'https://user.qzone.qq.com/2453294057' '''判断是否登录成功'''
def judge_login():
pass '''进入frame'''
def switch_frame(broeser,frame):
while True:
try:
broeser.switch_to.frame(frame) #一共两层
except NoSuchFrameException:
pass
else:
break
time.sleep(2) # 睡几秒,不然抓不到frame '''抓异常并初步处理数据'''
def get_erroy(browser,tag,return_sign = False):
try:
execute_output = browser.find_element_by_class_name(tag)
except NoSuchElementException :
print(111111111111111111111122222)
execute_output = ''
else:
if return_sign == False:
execute_output = execute_output.text.replace(' ','').replace('\n','')
return execute_output ''''分析生成了的所有页面'''
def analyse_html(broswser):
data_dict = {}
friend_speaks = broswser.find_elements_by_class_name('f-single.f-s-s')
for speak in friend_speaks:
qzone_talk = get_erroy(speak,'f-info')
deta_time = get_erroy(speak,'ui-mr8.state')
phone_model_tag = get_erroy(speak,'item',return_sign= True)
if phone_model_tag != '':
phone_model = phone_model_tag.find_element_by_tag_name('a').text
else:
phone_model = ''
print(qzone_talk,phone_model,deta_time)
data_dict.update({deta_time: [phone_model, qzone_talk]})
return data_dict '''判断是否有亲密度弹窗'''
def judge_pop_up(browser):
if len(browser.find_elements_by_class_name('btn-fs-sure')) != 0:
browser.find_elements_by_class_name('btn-fs-sure')[0].click() '''得到好友动态页面的所有数据'''
def get_all_data(friend_url):
#driver = login.login_qzone(login.qzone_url, login.username, login.password)
driver = login.login_qzone(login.qzone_url,login.username,login.password,browser_type = 'Firefox_headless')
driver.get(friend_url)
driver.switch_to.default_content()
time.sleep(4) #睡几秒,不然抓不到亲密度弹窗
judge_pop_up(driver)
driver.find_element_by_id("aOwnerFeeds").click()
driver.switch_to.default_content()
switch_frame(driver,'app_canvas_frame') #进入第一层frame
switch_frame(driver,'frameFeedList') #进入好友动态frame
while True:
try:
target = driver.find_element_by_class_name('b-inline.data_btn_more')
target.click()
except ElementNotInteractableException:
try:
target = driver.find_element_by_class_name('b-inline.data_is_loading')
target.click()
except ElementNotInteractableException:
pass
time.sleep(3)
finally:
driver.execute_script("arguments[0].scrollIntoView(false);", target)
finally_sign = driver.find_elements_by_class_name('b-inline.data_no_more.none') # 找不到这个标签时就退出
print(finally_sign)
if len(finally_sign) == 0:
break
time.sleep(2)
return driver '''点赞'''
def give_like(browser):
for like in browser.find_elements_by_class_name('item.qz_like_btn_v3'):
browser.execute_script("arguments[0].scrollIntoView(false);", like)
like.click()
time.sleep(60) if __name__ == '__main__':
driver = get_all_data(friend_qzone_url)
data = analyse_html(driver)
print(data)

get_qzone_data.py

上面三个脚本包括:
1、第一个是登录的脚本,可以选择使用火狐的无边界模式。
2、第二个使用第一个登录后,将空间里的QQ好友信息拿到(qq号:好友备注)保存到json文件里面。
3、第三个使用第一个登录后,有两个功能:
  1.得到该好友的所有动态的内容(只包括说说内容,发表的时间,和使用的手机号)
  2.可以给好友点赞。注:点太快了会被冻结

注:以上只是学习selenium所写的小脚本,可别用于非法用途。

QQ空间动态内容,好友信息,点赞爬虫脚本的更多相关文章

  1. QQ空间动态爬虫

    作者:虚静 链接:https://zhuanlan.zhihu.com/p/24656161 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 先说明几件事: 题目的意 ...

  2. 仿QQ空间动态界面分享

    先看看效果: 用极少的代码实现了 动态详情 及 二级评论 的 数据获取与处理 和 UI显示与交互,并且高解耦.高复用.高灵活. 动态列表界面MomentListFragment支持 下拉刷新与上拉加载 ...

  3. 技术揭秘“QQ空间”自动转发不良信息

    大家经常会看到QQ空间自动转发一些附带链接的不良信息,即便我们的QQ密码并没有被盗取.最近通过对一个QQ空间自动转发链接进行分析,发现该自动转发机制通过利用腾讯网站存在漏洞的页面,精心构造出利用代码获 ...

  4. 社交媒体(朋友圈、微博、QQ空间)开发一网打尽,PC端移动端都有!——源码来袭!

    一.应用场景 曾几何时,社交媒体已经驻扎到了几乎每个人的生活中.看看你身边的朋友,有几个不玩朋友圈的?就算他不玩朋友圈,那也得玩微博吧.再没有底线,也得玩QQ空间. 不过,作为程序员的我们,没事还是少 ...

  5. 长姿势 教你在qq空间上显示iPhone6尾巴

    下午刚午休完的时候,广州很多童鞋都感受到了震感,半青也感受到了,不仅如此,我还感受到了更大震感,那就是翻一下QQ空间动态,竟然看到有一位好友的尾巴竟然显示为“iPhone6”,顿时觉得该好友逼格太高了 ...

  6. QQ空间漫步者

    主要功能(QQ空间) 判断空间权限并跳过无法访问 留下足迹并可选:同时留言(可单独),赞主页(可单独),赞说说(可单独) 其他附加功能,导出QQ,导入群成员,好友,空间访客,说说评论,发表说说 送空间 ...

  7. QQ空间爬虫--获取好友信息

    QQ空间网页版:https://user.qzone.qq.com/ 登陆后,进入设置,有一个权限设置,设置“谁能看我的空间”为好友可见,然后构造爬虫. (1)获取Cookie 两种方式: 第一种:通 ...

  8. Python爬虫实战:使用Selenium抓取QQ空间好友说说

    前面我们接触到的,都是使用requests+BeautifulSoup组合对静态网页进行请求和数据解析,若是JS生成的内容,也介绍了通过寻找API借口来获取数据. 但是有的时候,网页数据由JS生成,A ...

  9. Python 爬虫监控女神的QQ空间新的说说,实现秒赞,并发送说说内容到你的邮箱

    这个文章主要是在前一篇文章上新增了说说秒赞的功能 前一篇文章可以了解一下 那么,这次主要功能就是 监控女神的 QQ空间,一旦女神发布新的说说,马上点赞,你的邮箱马上就会收到说说内容,是不是想了解一下 ...

随机推荐

  1. python笔记2-数据类型:字符串常用操作

    这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...

  2. java 利用同步工具类控制线程

    前言 参考来源:<java并发编程实战> 同步工具类:根据工具类的自身状态来协调线程的控制流.通过同步工具类,来协调线程之间的行为. 可见性:在多线程环境下,当某个属性被其他线程修改后,其 ...

  3. HTML5 选择前置摄像头,选择后置摄像头

    最近发现我写的都是乱七八糟的,觉得应该给大家带点福利,于是写了这篇 背景:最近想做个web应用,需要用到摄像头,但是发现默认一直是前置摄像头,拍照很麻烦,于是找了很多文章,居然没有人提到,只好FQ去找 ...

  4. java web 登录框

    我们会骂 12306 的网站界面挫,效果差,速度慢,回头看看自己写的代码,是不是也一样的狗血!在前端,很多看似简单的东西,内藏无数玄机.本文将以一个小小的登录框为入口,谈一谈如何完善自己的程序. 在很 ...

  5. Eclipse中JSP页面默认编码修改

    jsp页面默认编码为ISO-8859-1 要修改为UTF-8,步骤如下 选择windon-->preference 在弹出框操作 以后新建jsp页面编码为UTF-8编码

  6. centos 6.5 安装图形界面【转】

    最近想在centos 6.5上安装图形界面,在网上找到了方法.[原文链接] CentOS6相对于CentOS5的安装有了不少的进步,有不少默认的选项可以选择,如: Desktop :基本的桌面系统,包 ...

  7. 巨蟒python全栈开发-第21天 继承

    一.今日主要内容 1.了解python2和python3类的区别 python2在2.2之前使用的是经典类,2.2之后,使用的是新式类 class Foo: pass class Foo(object ...

  8. Oracle database精装版11gR2入门详细连接教程

    对于11g本身比较简单,适合学习者使用,对电脑要求相对较低. 自己一个人单机学习使用. 工具/原料   Oracle Database Express Edition 11g Release 2安装包 ...

  9. 《挑战程序设计竞赛》2.4 数据结构-并查集 POJ1182 2236 1703 AOJ2170

    POJ1182 http://poj.org/problem?id=1182 题目 难得的中文题... 食物链 Time Limit: 1000MS Memory Limit: 10000K Tota ...

  10. 让select下的option选中

    这里以默认选中当前月为例: HTML: 性别 <select name="sex" id="sex"> <option value=" ...