获取qq好友发的说说

转载 2017年08月05日 17:45:43

一、Selenium简介
Selenium是一个用于Web应用的功能自动化测试工具,Selenium 直接运行在浏览器中,就像真正的用户在操作一样。
由于这个性质,Selenium也是一个强大的网络数据采集工具,其可以让浏览器自动加载页面,获取需要的数据,甚至页面截图,或者是判断网站上某些动作是否发生。
Selenium自己不带浏览器,需要配合第三方浏览器来使用。支持的浏览器有Chrome、Firefox、IE、Phantomjs等。
如果使用Chrome、FireFox或IE,我们可以看得到一个浏览器的窗口被打开、打开网站、然后执行代码中的操作。
但是,让程序在后台中运行更符合我们爬虫的气质,所以自己多使用Phantomjs作为浏览器载体,本篇文章也以Phantomjs作介绍
Phantomjs是一个“无头”浏览器,也就是没有界面的浏览器,但是功能与普通的浏览器无异。
二、在Python中使用Selenium获取QQ空间好友说说
之前使用pip安装好了selenium,直接在代码中import即可。
下面我们以一个实际的例子——获取一个QQ空间好友的说说信息,来简单讲解一下Selenium+Phantomjs的使用。
我们需要爬取的页面时这样的:

QQ空间好友说说的链接为:http://user.qzone.qq.com/{好友QQ号}/311
我们抓取他发的说说的时间和内容,依旧先上代码:

from bs4 import BeautifulSoup
from selenium import webdriver
import time

#使用selenium
driver = webdriver.PhantomJS(executable_path="D:\\phantomjs.exe")
driver.maximize_window()
#登录QQ空间
def get_shuoshuo(qq):
    driver.get('http://user.qzone.qq.com/{}/311'.format(qq))
    time.sleep(5)
    try:
        driver.find_element_by_id('login_div')
        a = True
    except:
        a = False
    if a == True:
        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('QQ号')
        driver.find_element_by_id('p').clear()
        driver.find_element_by_id('p').send_keys('QQ密码')
        driver.find_element_by_id('login_button').click()
        time.sleep(3)
    driver.implicitly_wait(3)
    try:
        driver.find_element_by_id('QM_OwnerInfo_Icon')
        b = True
    except:
        b = False
    if b == True:
        driver.switch_to.frame('app_canvas_frame')
        content = driver.find_elements_by_css_selector('.content')
        stime = driver.find_elements_by_css_selector('.c_tx.c_tx3.goDetail')
        for con,sti in zip(content,stime):
            data = {
                'time':sti.text,
                'shuos':con.text
            }
            print(data)
        pages = driver.page_source
        soup = BeautifulSoup(pages,'lxml')

    cookie = driver.get_cookies()
    cookie_dict = []
    for c in cookie:
        ck = "{0}={1};".format(c['name'],c['value'])
        cookie_dict.append(ck)
    i = ''
    for c in cookie_dict:
        i += c
    print('Cookies:',i)
    print("==========完成================")

    driver.close()
    driver.quit()

if __name__ == '__main__':
    get_shuoshuo('好友QQ号')

获取到的部分数据截图如下:


接下来我们通过讲解代码,稍微了解一下Selenium的使用

三、代码简析
1.照例,导入需要使用的模块:

from bs4 import BeautifulSoup
from selenium import webdriver
import time

2.使用Selenium的webdriver实例化一个浏览器对象,在这里使用Phantomjs:

driver = webdriver.PhantomJS(executable_path="D:\\phantomjs.exe")

3.设置Phantomjs窗口最大化:

driver.maximize_window()

4.主函数部分
使用get()方法打开待抓取的URL:

driver.get('http://user.qzone.qq.com/{}/311'.format(qq))

等待5秒后,判断页面是否需要登录,通过查找页面是否有相应的DIV的id来判断:

    try:
        driver.find_element_by_id('login_div')
        a = True
    except:
        a = False

如果页面存在登录的DIV,则模拟登录:

       driver.switch_to.frame('login_frame') #切换到登录ifram
        driver.find_element_by_id('switcher_plogin').click()
        driver.find_element_by_id('u').clear()#选择用户名框
        driver.find_element_by_id('u').send_keys('QQ号')
        driver.find_element_by_id('p').clear()#选择密码框
        driver.find_element_by_id('p').send_keys('QQ密码')
        driver.find_element_by_id('login_button').click()#点击登录按钮
        time.sleep(3)

接着,判断好友空间是否设置了权限,通过判断是否存在元素ID:QM_OwnerInfo_Icon

  try:
        driver.find_element_by_id('QM_OwnerInfo_Icon')
        b = True
    except:
        b = False

如果有权限能够访问到说说页面,那么定位元素和数据,并解析:

    if b == True:
        driver.switch_to.frame('app_canvas_frame')
        content = driver.find_elements_by_css_selector('.content')
        stime = driver.find_elements_by_css_selector('.c_tx.c_tx3.goDetail')
        for con,sti in zip(content,stime):
            data = {
                # 'qq':qq,
                'time':sti.text,
                'shuos':con.text
            }
            print(data)

除了在Selenium中解析数据,我们还可以将当前页面保存为源码,再使用BeautifulSoup来解析:

pages = driver.page_source
soup = BeautifulSoup(pages,'lxml')

最后,我们尝试一下获取Cookie,使用get_cookies():

   cookie = driver.get_cookies()
    cookie_dict = []
    for c in cookie:
        ck = "{0}={1};".format(c['name'],c['value'])
        cookie_dict.append(ck)
    i = ''
    for c in cookie_dict:
        i += c
    print('Cookies:',i)

另外,再介绍两个Selenium的常用方法:
保存屏幕截图:

driver.save_screenshot('保存的文件路径及文件名')

执行JS脚本:

driver.execute_script("JS代码")                                            

爬取并分析QQ好友的说说

写在前面当你寂寞而闲着没有什么事可以干的时候,你就会好奇,别人正在交流什么。这个自己的小项目就是上一年(16年)的双11期间,别人都在陪人,或者打算买什么东西,我却在一个人。敲。代。。码。。。...
  • u014271114
  • u014271114
  • 2017年02月10日 21:02
  • 2086

Android 之实现类似QQ图片说说照片选择

Android 之实现类似QQ图片说说照片选择转载请注明出处:http://blog.csdn.net/klxh2009/ 本文出自【付小华的博客】 效果展示 布局文件 代码实现 效果展示 布局文件...
  • klxh2009
  • klxh2009
  • 2016年04月26日 22:12
  • 3812

仿QQ写说说效果的实现

今天同学问了关于仿QQ写说说界面的实现,个人感觉就是如同评论,回复的那种效果,按捺不住,就仿写了一回,大家不要见笑啊首先,我们需要根据需求进行分析这里我们看见刚进入的时候不显示键盘跟被键盘顶起的布局,...
  • qq_16131393
  • qq_16131393
  • 2016年03月20日 00:54
  • 2793

jquery实现qq空间发表说说模板

腾讯技术_QQ空间说说发表系统             *{margin:0px; padding:0px;} body{background:url('img/...
  • luo1728210158
  • luo1728210158
  • 2016年06月25日 22:20
  • 446

python获取自己发的说说内容

一、模拟登陆 import re from selenium import webdriver from time import sleep from PIL import Image #定义QQ空...
  • u012017783
  • u012017783
  • 2017年08月06日 19:59
  • 612

类似qq发说说的查看全文和收起

package com.example.shangcheng.adapter;import android.content.Context; import android.support.v7.wid...
  • xiaoshitounan
  • xiaoshitounan
  • 2017年03月06日 13:03
  • 309

QQ空间获取指定QQ号信息接口

论坛好几天没人发帖子了,前几天忙考试了,后来终于挂了,淡定,要淡定。 可能有的朋友们早就在空间抓到了这些接口,不会的一定要自己抓包啊,IE9版本以前的可以用httpwatch,IE9自带抓包软件(快...
  • yunyu5120
  • yunyu5120
  • 2014年07月17日 00:40
  • 9865

我悄悄告诉你:怎样用jquery制作腾讯QQ空间说说发表效果

经常发说说的朋友对这效果很熟悉吧,对的,就是空间说说发表,每天发说说是这样发,但是怎么做到的呢,今天分享的就是这个,用jquery来制作这个效果,下面来看代码。...
  • qq_39345165
  • qq_39345165
  • 2017年11月12日 15:14
  • 219

jQuery实现微博发布框@好友出现列表功能

先上图演示下:         看完图就直接上代码吧,其中有几处写死的地方,我有提示,你们自己改下就是了。 //@显示用户列表 (function($) { //判断是...
  • dyllove98
  • dyllove98
  • 2013年04月27日 13:59
  • 3295

获取QQ好友共同好友列表信息

QQ推出过可以了解你和你的好友之间有多少个共同好友的功能。有时候,我会好奇。咦,这个共同好友都会有谁呢,咱们的交际圈子相互认识的都会有谁呢?这是一个好玩的问题哈。会不会觉得很神奇。是的,我们活在圈子下...
  • qq_27696989
  • qq_27696989
  • 2015年11月21日 21:48
  • 973
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:获取qq好友发的说说
举报原因:
原因补充:

(最多只允许输入30个字)