一、安装基础的软件包:

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

2、下载selenium:python pip install selenium 

二、脚本说明:

from selenium importwebdriverfrom time importsleepusername='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' inurl:passelse: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)returndriverif __name__ == '__main__':login_qzone(qzone_url,username,password)

qzone_login.py

importqzone_login as loginfrom selenium.common.exceptions importStaleElementReferenceException,NoSuchElementExceptionfrom selenium importwebdriverimporttimeimportjsonqq_number_dict={}defsave_qq_number(tag_list):for line intag_list:qq_number= line.get_attribute('href').split('/')[-1]qq_number_dict.update({qq_number:line.text})'''得到qq空间里的所有好友,保存到文件里'''
defsave_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 inf: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 inf:print(len(json.loads(line)))

get_friends.py

importqzone_login as loginfrom selenium importwebdriverfrom selenium.webdriver.common.keys importKeysfrom selenium.common.exceptions importElementNotInteractableException,NoSuchFrameException,NoSuchElementExceptionimporttimefriend_qzone_url= 'https://user.qzone.qq.com/2453294057''''判断是否登录成功'''
defjudge_login():pass'''进入frame'''
defswitch_frame(broeser,frame):whileTrue:try:broeser.switch_to.frame(frame)#一共两层exceptNoSuchFrameException:passelse:breaktime.sleep(2)        #睡几秒,不然抓不到frame'''抓异常并初步处理数据'''
def get_erroy(browser,tag,return_sign =False):try:execute_output=browser.find_element_by_class_name(tag)exceptNoSuchElementException :print(111111111111111111111122222)execute_output= ''else:if return_sign ==False:execute_output= execute_output.text.replace(' ','').replace('\n','')returnexecute_output''''分析生成了的所有页面'''
defanalyse_html(broswser):data_dict={}friend_speaks= broswser.find_elements_by_class_name('f-single.f-s-s')for speak infriend_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').textelse:phone_model= ''print(qzone_talk,phone_model,deta_time)data_dict.update({deta_time: [phone_model, qzone_talk]})returndata_dict'''判断是否有亲密度弹窗'''
defjudge_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()'''得到好友动态页面的所有数据'''
defget_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')  #进入第一层frameswitch_frame(driver,'frameFeedList')      #进入好友动态framewhileTrue:try:target= driver.find_element_by_class_name('b-inline.data_btn_more')target.click()exceptElementNotInteractableException:try:target= driver.find_element_by_class_name('b-inline.data_is_loading')target.click()exceptElementNotInteractableException:passtime.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:breaktime.sleep(2)returndriver'''点赞'''
defgive_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所写的小脚本,可别用于非法用途。

转载于:https://www.cnblogs.com/chimeiwangliang/p/8532521.html

QQ空间动态内容,好友信息,点赞爬虫脚本相关推荐

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

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

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

    NEET & Independent Researcher 博客园 首页 联系 订阅 管理 公告 文章大多为转载 仅留作资料备份 Link  个人主页 - Github   一只猿 - 前端攻 ...

  3. qq空间动态设置在哪?

    有时候因为需要,需要屏蔽某某QQ好友的空间动态,当想解除屏蔽的时候,就需要去qq空间动态设置里去解除屏蔽. 方法/步骤 1 首先进入QQ空间,点击空间左侧的"好友动态". 2 然后 ...

  4. 【教程】10秒关闭手机QQ空间动态中的黄钻通知!再见了@黄钻官方团队!(以及关闭更多烦人的通知提醒)----2020.09.12

    手机QQ空间动态 突然一个角标1,兴致冲冲打开,一看! 竟然是: @黄钻官方团队 !!! 这次,我 教 你 彻 底 告别 @黄钻官方团队! (文末有更多屏蔽教程) 文字教程: 打手机QQ-动态-好友动 ...

  5. php 采集qq空间,php使用curl抓取qq空间的访客信息示例_php技巧

    这篇文章主要介绍了php使用curl抓取qq空间的访客信息示例,需要的朋友可以参考下 config.php<?php define('APP_DIR', dirname(__FILE__)); ...

  6. 【Python3.6爬虫学习记录】(九)模拟登陆QQ空间爬取好友所有留言并制作词云

    前言:非常郁闷,写了第三遍了,无故404 学了五天了,熬夜搞出这份代码,虽然一度卡死几个小时,但结果是好的. 目录 第一部分 Selenium+Chrome爬取空间留言 1.1 使用说明 1.2 代码 ...

  7. H5手机QQ分享到手Q、QQ空间、微信好友、朋友圈础通用接口

    H5手Q分享通用接口代码片段 <meta itemprop="name" content="网页标题"> <meta itemprop=&qu ...

  8. Android仿手机QQ空间动态评论,自动定位到输入框

    手机QQ空间浏览好友动态时,可以直接对动态评论,点击某条评论,动态列表自动滚动,使输入框刚好在该评论下面,而不会覆盖住评论内容.如下图所示, 首先要实现输入框刚好在输入面板上面,且动态列表不会被挤上去 ...

  9. QQ、QQ空间、微信好友、微信朋友圈、新浪微博的分享。

    对于分享这一块我也是研究了很久,本来打算用第3方的来做的.最后还是坚持下来了,决定直接用官方的. 首先给大家推荐一下一个第三方做分享的,现在这个第三方确实很不错,有时候我都想放弃官方的用他的来做.因为 ...

最新文章

  1. AI开发者们,2017年你们过得好吗?
  2. 应用程序自定义快捷键
  3. 如何维持整洁的 Git 提交记录?送你三个锦囊!
  4. (搬运工)macbook安装kali
  5. qt widget 嵌套与弹出_Gtk widget 与 Qt Widget的相互嵌套
  6. 集成JavaFX和Swing
  7. linux挂载磁盘阵列
  8. 华为鸿蒙系统英语报纸_“鸿蒙”系统的英文名叫这个!华为注册的这些《山海经》神兽都该怎么翻译?...
  9. Repository 仓储,你的归宿究竟在哪?(三)-SELECT 某某某。。。
  10. Maven - 安装 配置
  11. oracle的loop等循环语句的几个用法小例子[转]
  12. EasyCVR通过Ehome协议接入设备,获取RTSP流地址异常如何解决?
  13. 从无到有axure原型设计_从零开始学Axure原型设计(入门篇)
  14. 基于JAVA的宠物网站的设计与实现
  15. 如何html设置下载的字体呢?
  16. 新视野大学英语(第三版)读写教程4答案
  17. 算法练习(21):Frog Jump
  18. 1091: 童年生活二三事(多实例测试)Python
  19. 还在为无线困扰?思博伦STC WiFi测试方案助力体验提升
  20. wineqq之deepin wine系列(Linux版QQ总算有了完美无暇的方案)

热门文章

  1. Ubuntu 设置中文 languagesupport
  2. xml几种解析方式的优缺点
  3. 渗透测试 ( 8 ) --- Burp Suite Pro 官方文档、Brida(frida)
  4. python数据分析可视化大作业——对地铁数据的简单数据分析
  5. Tensorflow 2.x(keras)源码详解之第十章:keras中的模型保存与加载(详解Checkpointmd5模型序列化)
  6. 管理软件的重(zhong)装上阵--管理软件夜未眠(四)
  7. fork和getpid的返回值
  8. COMBOX的基本使用
  9. 时间序列预测常见模型总结
  10. RowBounds实现分页