欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬取網(wǎng)頁版QQ空間,生成各類圖表

 更新時(shí)間:2021年06月01日 16:48:19   作者:kuishou68  
最近python課程學(xué)完了,琢磨著用python點(diǎn)什么東西,經(jīng)過一番搜索,盯上了QQ空間,本文主要講述了如何爬取網(wǎng)頁版QQ空間,并生成詞云圖、柱狀圖、折線圖、餅圖的各種示例代碼

github源碼地址:

https://github.com/kuishou68/python

各類圖表的實(shí)現(xiàn)效果

爬取的說說內(nèi)容

個(gè)性化說說內(nèi)容詞云圖

每年發(fā)表說說總數(shù)柱狀圖、每年點(diǎn)贊和評(píng)論折線圖

7天好友動(dòng)態(tài)柱狀圖、餅圖

使用方法

按照你的谷歌瀏覽器下載指定版本的驅(qū)動(dòng) http://chromedriver.storage.googleapis.com/index.html

驅(qū)動(dòng)跟兩個(gè)python腳本放入同目錄,我的版本是90.0.4430的,查看你自己的版本,下載后把我的chromedriver.exe替換掉!

這里用到了很多第三方包,鼠標(biāo)放在報(bào)紅的包名下,用Alt+Enter導(dǎo)包,如果失敗則在控制臺(tái)用下面的必殺技

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

# 這里一定要設(shè)置編碼格式,防止后面寫入文件時(shí)報(bào)錯(cuò)

friend = '1569339843'  # 朋友的QQ號(hào),朋友的空間要求允許你能訪問
user = '783533896'  # 你的QQ號(hào)
pw = '1323mkoNJI.@'  # 你的QQ密碼

# 獲取瀏覽器驅(qū)動(dòng)
chrome_driver = 'chromedriver.exe'
driver = webdriver.Chrome(executable_path=chrome_driver)

# 瀏覽器窗口最大化
driver.maximize_window()

# 瀏覽器地址定向?yàn)閝q登陸頁面
driver.get("http://i.qq.com")

# 所以這里需要選中一下frame,否則找不到下面需要的網(wǎng)頁元素
driver.switch_to.frame("login_frame")
time.sleep(3)
# 自動(dòng)點(diǎn)擊賬號(hào)登陸方式
driver.find_element_by_id("switcher_plogin").click()
time.sleep(3)
# 賬號(hào)輸入框輸入已知qq賬號(hào)
driver.find_element_by_id("u").send_keys(user)
time.sleep(5)
# 密碼框輸入已知密碼
driver.find_element_by_id("p").send_keys(pw)
time.sleep(5)
# 自動(dòng)點(diǎn)擊登陸按鈕
driver.find_element_by_id("login_button").click()
time.sleep(5)
# 讓webdriver操縱當(dāng)前頁
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:
    # 下拉滾動(dòng)條,使瀏覽器加載出動(dòng)態(tài)加載的內(nèi)容,
    # 我這里是從1開始到6結(jié)束 分5 次加載完每頁數(shù)據(jù)
    for i in range(1, 6):
        height = 20000 * i  # 每次滑動(dòng)20000像素
        strWord = "window.scrollBy(0," + str(height) + ")"
        driver.execute_script(strWord)
        time.sleep(4)

    # 很多時(shí)候網(wǎng)頁由多個(gè)<frame>或<iframe>組成,webdriver默認(rèn)定位的是最外層的frame,
    # 所以這里需要選中一下說說所在的frame,否則找不到下面需要的網(wǎng)頁元素
    driver.switch_to.frame("app_canvas_frame")
    selector = etree.HTML(driver.page_source)
    divs = selector.xpath('//*[@id="msgList"]/li/div[3]')

    # 這里使用 a 表示內(nèi)容可以連續(xù)不清空寫入
    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")

    # 當(dāng)已經(jīng)到了尾頁,“下一頁”這個(gè)按鈕就沒有id了,可以結(jié)束了
    if driver.page_source.find('pager_next_' + str(next_num)) == -1:
        break

    # 找到“下一頁”的按鈕,因?yàn)橄乱豁摰陌粹o是動(dòng)態(tài)變化的,這里需要?jiǎng)討B(tài)記錄一下
    driver.find_element_by_id('pager_next_' + str(next_num)).click()

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

    # 因?yàn)樵谙乱粋€(gè)循環(huán)里首先還要把頁面下拉,所以要跳到外層的frame上
    driver.switch_to.parent_frame()

# 關(guān)閉瀏覽器
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')  # 默認(rèn)讀取sheet=0 Pandas DataFrame'

def getTimeStr(row):
    item = row['時(shí)間']
    if pd.isnull(item) | pd.isna(item):
        return

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

# 按年統(tǒng)計(jì)說說數(shù)量
def readCount(result, row):
    timeData = getTimeStr(row)
    if timeData == None: return
    if timeData in result.keys():
        result[timeData] += 1
    else:
        result[timeData] = 1

# 按年統(tǒng)計(jì)說說點(diǎn)贊數(shù)
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)

# 按年統(tǒng)計(jì)說說評(píng)論數(shù)
def readComment(result, row):
    item = row['評(píng)論']
    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]

# 統(tǒng)計(jì)每年發(fā)表說說次數(shù)柱狀圖
def paintBar():
    count = readExcel(df_excel).get('count')
    # V1 版本開始支持鏈?zhǔn)秸{(diào)用
    data = getKeyAndVal('count')
    print(data[0])
    d = (
        Bar()
            .add_xaxis(data[0])
            .add_yaxis("每年發(fā)表說說總數(shù)", data[1])
            .render("每年發(fā)表說說總數(shù)柱狀圖.html")
    )
paintBar()

# 統(tǒng)計(jì)點(diǎn)贊和評(píng)論折線圖
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("每年評(píng)論數(shù)", y_axis=commentValue)
            .add_yaxis("每年點(diǎn)贊數(shù)", y_axis=thumbValue)
            .render("每年點(diǎn)贊和評(píng)論折現(xiàn)圖.html")  # 輸出圖形
    )
paintLine()

其他代碼自行下載項(xiàng)目查看

以上就是python爬取網(wǎng)頁版QQ空間,生成各類圖表的詳細(xì)內(nèi)容,更多關(guān)于python 爬取QQ空間的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python3中datetime庫,time庫以及pandas中的時(shí)間函數(shù)區(qū)別與詳解

    python3中datetime庫,time庫以及pandas中的時(shí)間函數(shù)區(qū)別與詳解

    這篇文章主要介紹了python3中datetime庫,time庫以及pandas中的時(shí)間函數(shù)區(qū)別與詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Opencv圖像處理之詳解掩膜mask

    Opencv圖像處理之詳解掩膜mask

    這篇文章主要介紹了Opencv圖像處理之詳解掩膜mask,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 詳解Python中import機(jī)制

    詳解Python中import機(jī)制

    這篇文章主要介紹了Python中import機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • Python如何使用pathlib模塊處理文件路徑

    Python如何使用pathlib模塊處理文件路徑

    這篇文章主要介紹了Python如何使用pathlib模塊處理文件路徑,我們將從創(chuàng)建 Path 對(duì)象、絕對(duì)路徑與相對(duì)路徑、訪問文件路徑分量,以及檢查文件路徑是否存在等幾個(gè)方面進(jìn)行講解,需要的朋友可以參考下
    2024-10-10
  • Pandas對(duì)CSV文件讀寫操作詳解

    Pandas對(duì)CSV文件讀寫操作詳解

    本文帶你了解CSV文件的基礎(chǔ)知識(shí),那么當(dāng)需要處理導(dǎo)入數(shù)據(jù)時(shí),大多數(shù)?CSV?讀取、處理和寫入任務(wù)都可以通過基本的?Python?csv?庫輕松處理。如果大量數(shù)據(jù)要讀取和處理,該pandas庫還提供快速簡便的?CSV?處理功能
    2022-04-04
  • 用python實(shí)現(xiàn)刷點(diǎn)擊率的示例代碼

    用python實(shí)現(xiàn)刷點(diǎn)擊率的示例代碼

    今天小編就為大家分享一篇用python實(shí)現(xiàn)刷點(diǎn)擊率的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python PyMySQL操作MySQL數(shù)據(jù)庫的方法詳解

    Python PyMySQL操作MySQL數(shù)據(jù)庫的方法詳解

    PyMySQL是一個(gè)用于Python編程語言的純Python MySQL客戶端庫,它遵循Python標(biāo)準(zhǔn)DB API接口,并提供了許多方便的功能,本文就來和大家簡單介紹一下吧
    2023-05-05
  • 談一談基于python的面向?qū)ο缶幊袒A(chǔ)

    談一談基于python的面向?qū)ο缶幊袒A(chǔ)

    在本篇內(nèi)容中我們給大家整理了關(guān)于python面向?qū)ο缶幊袒A(chǔ)的觀點(diǎn)分析以及知識(shí)點(diǎn)整理,有需要的朋友們學(xué)習(xí)下。
    2019-05-05
  • Python圖像處理之透視變換的實(shí)戰(zhàn)應(yīng)用

    Python圖像處理之透視變換的實(shí)戰(zhàn)應(yīng)用

    透視變換(Perspective Transformation)是將圖片投影到一個(gè)新的視平面(Viewing Plane),也稱作投影映射(Projective Mapping),下面這篇文章主要給大家介紹了關(guān)于Python圖像處理之透視變換的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module named ‘pymssql‘的解決方法

    Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module 

    這篇文章給大家介紹了Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module named ‘pymssql‘的解決方法,如果有遇到相同問題的朋友可以參考閱讀一下本文
    2023-10-10

最新評(píng)論