日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

python爬虫学习:爬虫QQ说说并生成词云图,回忆满满

發(fā)布時間:2025/3/21 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫学习:爬虫QQ说说并生成词云图,回忆满满 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

自學(xué)過一段時間的python,用django自己做了個 網(wǎng)站,也用requests+BeautifulSoup爬蟲過些簡單的網(wǎng)站,周末研究學(xué)習(xí)了一波,準備爬取QQ空間的說說,并把內(nèi)容存在txt中,讀取生成云圖。
好久不登qq了,空間說說更是幾年不玩了,里面滿滿的都是上學(xué)時候的回憶,看著看著就笑了,笑著笑著就...哈哈哈~~
無圖言虛空


當(dāng)年的我還是那么風(fēng)華正茂、幽默風(fēng)趣...
言歸正傳,本次使用的是selenium模擬登錄+BeautifulSoup4爬取數(shù)據(jù)+wordcloud生成詞云圖

BeautifulSoup安裝

pip install beautifulsoup4
這里有beautifulsoup4 的 官方文檔
還需要用到解析器,我選擇的是html5lib解析器pip install html5lib
下表列出了主要的解析器,以及它們的優(yōu)缺點:

解析器使用方法優(yōu)勢劣勢
Python標準庫BeautifulSoup(markup, "html.parser")Python的內(nèi)置標準庫 執(zhí)行速度適中 文檔容錯能力強Python 2.7.3 or 3.2.2)前 的版本中文檔容錯能力差
lxml HTML 解析器BeautifulSoup(markup, "lxml")速度快 文檔容錯能力強需要安裝C語言庫
lxml XML 解析器BeautifulSoup(markup, ["lxml", "xml"]) BeautifulSoup(markup, "xml")速度快 唯一支持XML的解析器需要安裝C語言庫
html5libBeautifulSoup(markup, "html5lib")最好的容錯性 以瀏覽器的方式解析文檔 生成HTML5格式的文檔速度慢 不依賴外部擴展

selenium模擬登錄

使用selenium模擬登錄QQ空間,安裝pip install selenium
我用的是chrom瀏覽器,webdriver.Chrome(),獲取Chrome瀏覽器的驅(qū)動。
這里還需要下載安裝對應(yīng)瀏覽器的驅(qū)動,否則在運行腳本時,會提示 chromedriver executable needs to be in PATH錯誤,用的是mac,網(wǎng)上找的一篇下載驅(qū)動的文章,https://blog.csdn.net/zxy987872674/article/details/53082896
同理window的也一樣,下載對應(yīng)的驅(qū)動,解壓后,將下載的**.exe 放到Python的安裝目錄,例如 D:\python 。 同時需要將Python的安裝目錄添加到系統(tǒng)環(huán)境變量里。

qq登錄頁http://i.qq.com,利用webdriver打開qq空間的登錄頁面

driver = webdriver.Chrome() driver.get("http://i.qq.com") 復(fù)制代碼


打開之后右擊檢查查看頁面元素,發(fā)現(xiàn)帳號密碼登錄在login_frame里,先定位到所在的frame,driver.switch_to.frame("login_frame") ,再自動點擊 帳號密碼登錄 按鈕,自動輸入帳號密碼登錄,并且打開說說頁面,詳細代碼如下

friend = '' # 朋友的QQ號,**朋友的空間要求允許你能訪問**,這里可以輸入自己的qq號 user = '' # 你的QQ號 pw = '' # 你的QQ密碼# 獲取瀏覽器驅(qū)動 driver = webdriver.Chrome()# 瀏覽器窗口最大化 driver.maximize_window()# 瀏覽器地址定向為qq登陸頁面 driver.get("http://i.qq.com")# 定位到登錄所在的frame driver.switch_to.frame("login_frame")# 自動點擊賬號登陸方式 driver.find_element_by_id("switcher_plogin").click()# 賬號輸入框輸入已知qq賬號 driver.find_element_by_id("u").send_keys(user)# 密碼框輸入已知密碼 driver.find_element_by_id("p").send_keys(pw)# 自動點擊登陸按鈕 driver.find_element_by_id("login_button").click()# 讓webdriver操縱當(dāng)前頁 driver.switch_to.default_content()# 跳到說說的url, friend可以任意改成你想訪問的空間,比如這邊訪問自己的qq空間 driver.get("http://user.qzone.qq.com/" + friend + "/311") 復(fù)制代碼

這個時候可以看到已經(jīng)打開了qq說說的頁面了,注意 部分空間打開之后會出現(xiàn)一個提示框,需要先模擬點擊事件關(guān)閉這個提示框


tm我以前竟然還有個黃鉆,好可怕~~,空間頭像也是那么的年輕、主流...

try:#找到關(guān)閉按鈕,關(guān)閉提示框button = driver.find_element_by_id("dialog_button_111").click() except:pass 復(fù)制代碼

同時因為說說內(nèi)容是動態(tài)加載的,需要自動下拉滾動條,加載出全部的內(nèi)容,再模擬點擊 下一頁 加載內(nèi)容。具體代碼見下面。

BeautifulSoup爬取說說

F12查看內(nèi)容,可以找到說說在feed_wrap這個<div>,<ol>里面的<li>標簽數(shù)組里面,具體每條說說內(nèi)容在<div> class="bd"的<pre>標簽中。

next_num = 0 # 初始“下一頁”的id while True:# 下拉滾動條,使瀏覽器加載出全部的內(nèi)容,# 這里是從0開始到5結(jié)束 分5 次加載完每頁數(shù)據(jù)for i in range(0, 5):height = 20000 * i # 每次滑動20000像素strWord = "window.scrollBy(0," + str(height) + ")"driver.execute_script(strWord)time.sleep(2)# 這里需要選中 說說 所在的frame,否則找不到下面需要的網(wǎng)頁元素driver.switch_to.frame("app_canvas_frame")# 解析頁面元素content = BeautifulSoup(driver.page_source, "html5lib")# 找到"feed_wrap"的div里面的ol標簽ol = content.find("div", class_="feed_wrap").ol# 通過find_all遍歷li標簽數(shù)組lis = ol.find_all("li", class_="feed")# 將說說內(nèi)容寫入文件,使用 a 表示內(nèi)容可以連續(xù)不清空寫入with open('qq_word.txt', 'a', encoding='utf-8') as f:for li in lis:bd = li.find("div", class_="bd")#找到具體說說所在標簽pre,獲取內(nèi)容ss_content = bd.pre.get_text()f.write(ss_content + "\n")# 當(dāng)已經(jīng)到了尾頁,“下一頁”這個按鈕就沒有id了,可以結(jié)束了if driver.page_source.find('pager_next_' + str(next_num)) == -1:break# 找到“下一頁”的按鈕,因為下一頁的按鈕是動態(tài)變化的,這里需要動態(tài)記錄一下driver.find_element_by_id('pager_next_' + str(next_num)).click()# “下一頁”的idnext_num += 1# 因為在下一個循環(huán)里首先還要把頁面下拉,所以要跳到外層的frame上driver.switch_to.parent_frame()復(fù)制代碼

至此QQ說說已經(jīng)爬取下來,并且保存在了qq_word文件里
接下來生成詞云圖

詞云圖

使用wordcloud包生成詞云圖,pip install wordcloud
這里還可以使用jieba分詞,我并沒有使用,因為我覺得qq說說的句子讀起來才有點感覺,個人喜好,用jieba分詞可以看到說說高頻次的一些詞語。
設(shè)置下wordcloud的一些屬性,注意 這里要設(shè)置font_path屬性,否則漢字會出現(xiàn)亂碼。
這里還有個要提醒的是,如果使用了虛擬環(huán)境的,不要在虛擬環(huán)境下運行以下腳本,否則可能會報錯 RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information. ,我就遇到了這種情況,deactivate 退出了虛擬環(huán)境再跑的

# coding:utf-8from wordcloud import WordCloud import matplotlib.pyplot as plt# 生成詞云 def create_word_cloud(filename):# 讀取文件內(nèi)容text = open("{}.txt".format(filename), encoding='utf-8').read()# 設(shè)置詞云wc = WordCloud(# 設(shè)置背景顏色background_color="white",# 設(shè)置最大顯示的詞云數(shù)max_words=2000,# 這種字體都在電腦字體中,window在C:\Windows\Fonts\下,mac我選的是/System/Library/Fonts/PingFang.ttc 字體font_path='/System/Library/Fonts/PingFang.ttc',height=1200,width=2000,# 設(shè)置字體最大值max_font_size=100,# 設(shè)置有多少種隨機生成狀態(tài),即有多少種配色方案random_state=30,)myword = wc.generate(text) # 生成詞云# 展示詞云圖plt.imshow(myword)plt.axis("off")plt.show()wc.to_file('qq_word.png') # 把詞云保存下if __name__ == '__main__':create_word_cloud('qq_word')復(fù)制代碼

至此,爬取qq說說內(nèi)容,并生成詞云圖。
源碼github地址: github.com/taixiang/sp…

歡迎關(guān)注我的博客:blog.manjiexiang.cn/
歡迎關(guān)注微信號:春風(fēng)十里不如認識你

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的python爬虫学习:爬虫QQ说说并生成词云图,回忆满满的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。