目录
github源码地址:
各类图表的实现效果爬取的说说内容个性化说说内容词云图每年发表说说总数柱状图、每年点赞和评论折线图7天好友动态柱状图、饼图使用方法主要代码
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.pyimport 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)
# 很多时候网页由多个或
# 这里使用 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空间的资料请关注脚本之家其它相关文章!
您可能感兴趣的文章:python对网页文本的格式化实例方法python数据可视化 – 利用Bokeh和Bottle.py在网页上展示你的数据python爬虫基础之简易网页搜集器Python如何利用正则表达式爬取网页信息及图片Python获取网页数据详解流程
