1. 程式人生 > >Python爬蟲實戰(6)-爬取QQ空間好友說說並生成詞雲(超詳細)

Python爬蟲實戰(6)-爬取QQ空間好友說說並生成詞雲(超詳細)

前言

先看效果圖:

TXT檔案:

如果想生成特定圖片樣式的詞雲圖,可以直接訪問下面這篇文章學一下:
https://mp.weixin.qq.com/s/FUwQ4jZu6KMkjRvEG3UfGw
前幾天我們陸陸續續的講了Python如何生成詞雲以及Selenium的安裝使用,今天我們綜合一下這些知識,寫一篇爬蟲實戰文章,帶大家爬取QQ空間好友說說寫人本地txt檔案,並生成詞雲。
大家一定很感興趣吧?下面開始正題。

思路

1.確認訪問的URL
2.模擬登入你的QQ號
3.判斷好友空間是否加了許可權,切換到說說的frame,爬取當前頁面資料,下拉滾動條,翻頁繼續獲取 爬取的內容寫入本地TXT檔案中
4.爬取到最後一頁,讀取TXT檔案從而生成詞雲

具體分析

1.確認訪問的URL
這就很簡單了,我們通過觀察發現,QQ空間好友的URL:
https://user.qzone.qq.com/{好友QQ號}/311

2.我們在請求的時候會遇到模擬登入,也就是要通過Selenium+瀏覽器登入你的QQ號後才能訪問你好友的QQ空間
下面是模擬登入的程式碼:

file = 'C:/Users/Administrator/Desktop/{}.txt'.format(qq)
    driver = webdriver.Firefox()
    driver.maximize_window() #視窗最大化

    driver.get('https://user.qzone.qq.com/{}/311'
.format(qq)) #URL driver.implicitly_wait(10) # 隱示等待,為了等待充分載入好網址 driver.find_element_by_id('login_div') driver.switch_to_frame('login_frame') #切到輸入賬號密碼的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()#點選‘登入’ driver.switch_to_default_content() #跳出當前的frame,這步很關鍵,不寫會報錯的,因為你登入後還要切刀另一個frame

需要強調是 driver.switch_to_default_content() ,表示跳出當前的frame,這步很關鍵,因為你登入後還要切刀另一個frame。不寫的話會出現下面的錯誤:

3.第三部分我分幾個點來說:
(1).判斷空間是否加了許可權

    try:
        driver.find_element_by_id('QM_OwnerInfo_Icon')#判斷是否QQ空間加了許可權
        b = True
    except:
        b = False

(2)切換到說說的frame,這個大家都會找吧

(3)下拉滾動條
下拉滾動條是為了點選‘下一頁’,下拉到可見檢視。下拉滾動條要注意一點:
一定要對應它的frame,不要在爬取說說的frame下拉。

#分4此下拉,確保能下拉到底部
   for j in range(1, 5):
                    driver.execute_script("window.scrollBy(0,5000)")
                    time.sleep(2)

(4).爬取說說資料,這就簡單了吧?我用的xpath獲取的說說的title,感興趣的朋友可以把時間等資料一起獲取

                selector = etree.HTML(driver.page_source)
                title = selector.xpath('//li/div/div/pre/text()')

(5).翻頁
直接點選‘下一頁’即可。

 driver.find_element_by_link_text(u'下一頁').click()

(6).txt資料寫入,不用多說,爬取到title了直接寫入

                for i in title:
                    if not os.path.exists(file):
                        print('建立TXT成功')

                    with open(file, 'a+') as f:
                        f.write(i + '\n\n')
                        f.close()

4.生成詞雲,這只是普通的模式,想具體瞭解可以看我以前文章或者Google

def get_wordcloud(file):


    f = open(file, 'r', encoding='gbk').read()

    # 結巴分詞,生成字串,wordcloud無法直接生成正確的中文詞雲
    cut_text = " ".join(jieba.cut(f))

    wordcloud = WordCloud(
        # 設定字型,不然會出現口字亂碼,文字的路徑是電腦的字型一般路徑,可以換成別的
        font_path="C:/Windows/Fonts/simfang.ttf",
        # 設定了背景,寬高
        background_color="white", width=2000, height=1380).generate(cut_text)

    plt.imshow(wordcloud, interpolation="bilinear")
    plt.axis("off")
    plt.show()

由於時間問題,此篇文章只支援輸入一個好友的QQ號,你要是想爬取你的所有的QQ好友的說說,可以現在QQ郵箱獲取你所有好友的QQ號,然後生成一個數組,依次獲取就可以了。

原始碼獲取方式

加我的微信,我發給你,一起交流,交個朋友!:

我的知識星球