python爬取网页版QQ空间,生成各类图表

github源码地址:

https://github.com/kuishou68/python

各类图表的实现效果

爬取的说说内容

个性化说说内容词云图

每年发表说说总数柱状图、每年点赞和评论折线图

7天好友动态柱状图、饼图

使用方法

按照你的谷歌浏览器下载指定版本的驱动 http://chromedriver.storage.googleapis.com/index.html

驱动跟两个python脚本放入同目录,我的版本是90.0.4430的,查看你自己的版本,下载后把我的chromedriver.exe替换掉!

这里用到了很多第三方包,鼠标放在报红的包名下,用Alt+Enter导包,如果失败则在控制台用下面的必杀技

pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

主要代码

qq空间txt.py

import time
from selenium import webdriver
from lxml import etree

# 这里一定要设置编码格式,防止后面写入文件时报错

friend = '1569339843'  # 朋友的QQ号,朋友的空间要求允许你能访问
user = '783533896'  # 你的QQ号
pw = '1323mkoNJI.@'  # 你的QQ密码

# 获取浏览器驱动
chrome_driver = 'chromedriver.exe'
driver = webdriver.Chrome(executable_path=chrome_driver)

# 浏览器窗口最大化
driver.maximize_window()

# 浏览器地址定向为qq登陆页面
driver.get("http://i.qq.com")

# 所以这里需要选中一下frame,否则找不到下面需要的网页元素
driver.switch_to.frame("login_frame")
time.sleep(3)
# 自动点击账号登陆方式
driver.find_element_by_id("switcher_plogin").click()
time.sleep(3)
# 账号输入框输入已知qq账号
driver.find_element_by_id("u").send_keys(user)
time.sleep(5)
# 密码框输入已知密码
driver.find_element_by_id("p").send_keys(pw)
time.sleep(5)
# 自动点击登陆按钮
driver.find_element_by_id("login_button").click()
time.sleep(5)
# 让webdriver操纵当前页
driver.switch_to.default_content()
time.sleep(5)
# 跳到说说的url, friend你可以任意改成你想访问的空间
driver.get("http://user.qzone.qq.com/" + friend + "/311")
time.sleep(5)
next_num = 0  # 初始“下一页”的id

while True:
    # 下拉滚动条,使浏览器加载出动态加载的内容,
    # 我这里是从1开始到6结束 分5 次加载完每页数据
    for i in range(1, 6):
        height = 20000 * i  # 每次滑动20000像素
        strWord = "window.scrollBy(0," + str(height) + ")"
        driver.execute_script(strWord)
        time.sleep(4)

    # 很多时候网页由多个<frame>或<iframe>组成,webdriver默认定位的是最外层的frame,
    # 所以这里需要选中一下说说所在的frame,否则找不到下面需要的网页元素
    driver.switch_to.frame("app_canvas_frame")
    selector = etree.HTML(driver.page_source)
    divs = selector.xpath('//*[@id="msgList"]/li/div[3]')

    # 这里使用 a 表示内容可以连续不清空写入
    with open('qq_word.txt', 'a', encoding="utf-8") as f:
        for div in divs:
            qq_name = div.xpath('./div[2]/a/text()')
            qq_content = div.xpath('./div[2]/pre/text()')
            qq_time = div.xpath('./div[4]/div[1]/span/a/text()')
            qq_praise = div.xpath('./div[4]/div[2]/span/span/a[2]/text()')
            qq_comment = div.xpath('./div[4]/div[2]/a[3]/text()')

            qq_name = qq_name[0] if len(qq_name) > 0 else ''
            qq_content = qq_content[0] if len(qq_content) > 0 else ''
            qq_content = qq_content.replace('\n', ' ')
            qq_time = qq_time[0] if len(qq_time) > 0 else ''
            qq_praise = qq_praise[0] if len(qq_praise) > 0 else ''
            qq_comment = qq_comment[0] if len(qq_comment) > 0 else ''
            print(qq_name, qq_time, qq_content, qq_praise, qq_comment)
            f.write(qq_content + "\n")

    # 当已经到了尾页,“下一页”这个按钮就没有id了,可以结束了
    if driver.page_source.find('pager_next_' + str(next_num)) == -1:
        break

    # 找到“下一页”的按钮,因为下一页的按钮是动态变化的,这里需要动态记录一下
    driver.find_element_by_id('pager_next_' + str(next_num)).click()

    # “下一页”的id
    next_num += 1

    # 因为在下一个循环里首先还要把页面下拉,所以要跳到外层的frame上
    driver.switch_to.parent_frame()

# 关闭浏览器
driver.quit()

各种图表的生成

import pandas as pd
from pyecharts.charts import Bar
from pyecharts.charts import Pie
import pyecharts.options as opts
from pyecharts.charts import Line

import re

df_excel = pd.read_excel('qq_excel.xlsx')  # 默认读取sheet=0 Pandas DataFrame'

def getTimeStr(row):
    item = row['时间']
    if pd.isnull(item) | pd.isna(item):
        return

    data = item.split('年')[0]
    return data

# 按年统计说说数量
def readCount(result, row):
    timeData = getTimeStr(row)
    if timeData == None: return
    if timeData in result.keys():
        result[timeData] += 1
    else:
        result[timeData] = 1

# 按年统计说说点赞数
def readThumb(result, row):
    item = row['赞']
    if pd.isnull(item):
        return
    # data = re.match(r'赞\((\d+).*', item, re.M | re.I)
    if len(item.split("(")) <= 1:
        return
    data = item.split("(")[1].split(")")[0]

    timeData = getTimeStr(row)
    if timeData == None: return
    if timeData in result.keys():
        result[timeData] += int(data)
    else:
        result[timeData] = int(data)

# 按年统计说说评论数
def readComment(result, row):
    item = row['评论']
    if pd.isnull(item):
        return
    # data = re.match(r'赞\((\d+).*', item, re.M | re.I)
    if len(item.split("(")) <= 1:
        return
    data = item.split("(")[1].split(")")[0]

    timeData = getTimeStr(row)
    if timeData == None: return
    if timeData in result.keys():
        result[timeData] += int(data)
    else:
        result[timeData] = int(data)

def readExcel(df_excel):
    count = {}
    result = {}
    thumb = {}
    comment = {}
    for index, row in df_excel.iterrows():
        readCount(count, row)
        readThumb(thumb, row)
        readComment(comment, row)

    result['count'] = count
    result['thumb'] = thumb
    result['comment'] = comment
    return result

def getKeyAndVal(keyWord):
    data = readExcel(df_excel).get(keyWord)
    key = []
    value = []
    for item in data.keys():
        key.append(item)
        value.append(data[item])
    key.reverse()
    value.reverse()
    return [key, value]

# 统计每年发表说说次数柱状图
def paintBar():
    count = readExcel(df_excel).get('count')
    # V1 版本开始支持链式调用
    data = getKeyAndVal('count')
    print(data[0])
    d = (
        Bar()
            .add_xaxis(data[0])
            .add_yaxis("每年发表说说总数", data[1])
            .render("每年发表说说总数柱状图.html")
    )
paintBar()

# 统计点赞和评论折线图
def paintLine():
    commentData = getKeyAndVal('comment')
    thumbData = getKeyAndVal('thumb')

    xaxis_data = commentData[0]
    commentValue = commentData[1]
    thumbValue = thumbData[1]
    d = (
        Line()
            .add_xaxis(xaxis_data=xaxis_data)
            .add_yaxis("每年评论数", y_axis=commentValue)
            .add_yaxis("每年点赞数", y_axis=thumbValue)
            .render("每年点赞和评论折现图.html")  # 输出图形
    )
paintLine()

其他代码自行下载项目查看

以上就是python爬取网页版QQ空间,生成各类图表的详细内容,更多关于python 爬取QQ空间的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python爬取qq空间说说的实例代码

    具体代码如下所示: #coding:utf-8 #!/usr/bin/python3 from selenium import webdriver import time import re import importlib2 import sys importlib2.reload(sys) def startSpider(): driver = webdriver.Chrome('/Users/zachary/zachary/chromedriver.exe') #这个是chormedriv

  • Python读取Excel数据并生成图表过程解析

    一.需求背景 自己一直在做一个周基金定投模拟,每周需要添加一行数据,并生成图表.以前一直是用Excel实现的.但数据行多后,图表大小调整总是不太方便,一般只能通过缩放比例解决. 二.需求实现目标 通过Python程序读取Excel文件中的数据,生成图表,最好将生成图表生成至浏览器页面,后期数据多之后,也能自动缩放,而不会出现显示不全问题. 三.需求实现代码 # 调用本地echarts.min.js 文件 from pyecharts.globals import CurrentConfig Cu

  • python xlsxwriter库生成图表的应用示例

    xlsxwriter可能用过的人并不是很多,不过使用后就会感觉,他的功能让你叹服,除了可以按要求生成你所需要的excel外 还可以加上很形象的各种图,比如柱状图.饼图.折线图等. xlsxwriter 基本用法,创建 xlsx 文件并添加数据 官方文档:http://xlsxwriter.readthedocs.org/ xlsxwriter 可以操作 xls 格式文件 注意:xlsxwriter 只能创建新文件,不可以修改原有文件.如果创建新文件时与原有文件同名,则会覆盖原有文件 Linux

  • 用Python登录好友QQ空间点赞的示例代码

    记得之前跟我女票说过,说要帮她空间点赞,点到999就不点了.刚开始还能天天记得,但是后来事情一多,就难免会忘记,前两天点赞的时候忽然觉得这样好枯燥啊,正好也在学Python,就在想能不能有什么方法能自动点赞. 以前学C借助win32API也干过操作其他应用程序的事,想想可行性还是挺高的,于是就去百度了一下.发现还真有类似的,说干就干,正好也是周末,那就直接熬夜"撸"起来吧.先上代码: def QQZan(qq): browser = webdriver.Chrome() browser

  • python实现QQ空间自动点赞功能

    本文实例为大家分享了python实现QQ空间自动点赞的具体代码,供大家参考,具体内容如下 项目github地址 使用python实现qq空间自动点赞功能. 需自行安装库并配置环境. 我想实现的是每6个小时就自动更新一次cookie.这也是和网上其他版本相比具有的优点.不用手动输入cookie.更加自动.(不负责任的说,这个功能没有测试过.) 程序运行方法:将代码存为.py文件,运行即可. 输入QQ密码的时候采用了linux登录的方式--没有回显. from selenium import web

  • python 用 xlwings 库 生成图表的操作方法

    xlwings是一个获得BSD许可的Python库,可以很容易地从Excel调用Python,反之亦然. 它适用于Windows和Mac上的Microsoft Excel. 在官方文档里找不到具体怎么生成图表,和一些参数设置. 这里自己整理了一下. import xlwings as xw app = xw.App() wb = app.books.active sht = wb.sheets.active chart = sht.charts.add(100, 10) # 100, 10 为图

  • python从Oracle读取数据生成图表

    初次学习python,连接Oracle数据库,导出数据到Excel,再从Excel里面读取数据进行绘图,生成png保存出来. 1.涉及到的python模块(模块安装就不进行解释了): import os import cx_Oracle import openpyxl import time import csv import xlrd from matplotlib import pyplot as plt from matplotlib import font_manager 2.连接数据库

  • python爬取网页版QQ空间,生成各类图表

    github源码地址: https://github.com/kuishou68/python 各类图表的实现效果 爬取的说说内容 个性化说说内容词云图 每年发表说说总数柱状图.每年点赞和评论折线图 7天好友动态柱状图.饼图 使用方法 按照你的谷歌浏览器下载指定版本的驱动 http://chromedriver.storage.googleapis.com/index.html 驱动跟两个python脚本放入同目录,我的版本是90.0.4430的,查看你自己的版本,下载后把我的chromedri

  • Python爬取网页信息的示例

    Python爬取网页信息的步骤 以爬取英文名字网站(https://nameberry.com/)中每个名字的评论内容,包括英文名,用户名,评论的时间和评论的内容为例. 1.确认网址 在浏览器中输入初始网址,逐层查找链接,直到找到需要获取的内容. 在打开的界面中,点击鼠标右键,在弹出的对话框中,选择"检查",则在界面会显示该网页的源代码,在具体内容处点击查找,可以定位到需要查找的内容的源码. 注意:代码显示的方式与浏览器有关,有些浏览器不支持显示源代码功能(360浏览器,谷歌浏览器,火

  • 浅谈Python爬取网页的编码处理

    背景 中秋的时候,一个朋友给我发了一封邮件,说他在爬链家的时候,发现网页返回的代码都是乱码,让我帮他参谋参谋(中秋加班,真是敬业= =!),其实这个问题我很早就遇到过,之前在爬小说的时候稍微看了一下,不过没当回事,其实这个问题就是对编码的理解不到位导致的. 问题 很普通的一个爬虫代码,代码是这样的: # ecoding=utf-8 import re import requests import sys reload(sys) sys.setdefaultencoding('utf8') url

  • Python爬取网页的所有内外链的代码

    项目介绍 采用广度优先搜索方法获取一个网站上的所有外链. 首先,我们进入一个网页,获取网页的所有内链和外链,再分别进入内链中,获取该内链的所有内链和外链,直到访问完所有内链未知. 代码大纲 1.用class类定义一个队列,先进先出,队尾入队,队头出队: 2.定义四个函数,分别是爬取网页外链,爬取网页内链,进入内链的函数,以及调函数: 3.爬取百度图片(https://image.baidu.com/),先定义两个队列和两个数组,分别来存储内链和外链:程序开始时,先分别爬取当前网页的内链和外链,再

  • Python 爬取网页图片详解流程

    简介 快乐在满足中求,烦恼多从欲中来 记录程序的点点滴滴. 输入一个网址从这个网址中解析出图片,并将它保存在本地 流程图 程序分析 解析主网址 def get_urls(): url = 'http://www.nipic.com/show/35350678.html' # 主网址 pattern = "(http.*?jpg)" header = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKi

  • python爬取网页数据到保存到csv

    目录 任务需求: 爬取网址: 网址页面: 代码实现结果: 代码实现: 完整代码: 总结 任务需求: 爬取一个网址,将网址的数据保存到csv中. 爬取网址: https://www.iqiyi.com/ranks1/1/0?vfrm=pcw_home&vfrmblk=&vfrmrst=712211_dianyingbang_rebo_title 网址页面: 代码实现结果: 代码实现: 导入包: import requests import parsel import csv 设置csv文件格

  • Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: Python 3.6官网下载 本地下载 我们这里以sogou作为爬取的对象. 首先我们进入搜狗图片http://pic.sogou.com/,进入壁纸分类(当然只是个例子Q_Q),因为如果需要爬取某网站资料,那么就要初步的了解它- 进去后就是这个啦,然后F12进入开发人员选项,笔者用的是Chrome. 右键图片>>检查 发现我们需要的图片src是在img标签下的,于是先试着用

  • python爬取网页转换为PDF文件

    爬虫的起因 官方文档或手册虽然可以查阅,但是如果变成纸质版的岂不是更容易翻阅与记忆.如果简单的复制粘贴,不知道何时能够完成.于是便开始想着将Android的官方手册爬下来. 全篇的实现思路 分析网页 学会使用BeautifulSoup库 爬取并导出 参考资料: * 把廖雪峰的教程转换为PDF电子书 * Requests文档 * Beautiful Soup文档 配置 在Ubuntu下使用Pycharm运行成功 转PDF需要下载wkhtmltopdf 具体过程 网页分析 如下所示的一个网页,要做的

  • 实例讲解Python爬取网页数据

    一.利用webbrowser.open()打开一个网站: >>> import webbrowser >>> webbrowser.open('http://i.firefoxchina.cn/?from=worldindex') True 实例:使用脚本打开一个网页. 所有Python程序的第一行都应以#!python开头,它告诉计算机想让Python来执行这个程序.(我没带这行试了试,也可以,可能这是一种规范吧) 1.从sys.argv读取命令行参数:打开一个新的文

  • python爬虫爬取网页表格数据

    用python爬取网页表格数据,供大家参考,具体内容如下 from bs4 import BeautifulSoup import requests import csv import bs4 #检查url地址 def check_link(url): try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: print('无法链接服务器!!!')

随机推荐