日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

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

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


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

BeautifulSoup安裝

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

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

selenium模擬登錄

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

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

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


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

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

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


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

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

同時(shí)因?yàn)檎f(shuō)說(shuō)內(nèi)容是動(dòng)態(tài)加載的,需要自動(dòng)下拉滾動(dòng)條,加載出全部的內(nèi)容,再模擬點(diǎn)擊 下一頁(yè) 加載內(nèi)容。具體代碼見下面。

BeautifulSoup爬取說(shuō)說(shuō)

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

next_num = 0 # 初始“下一頁(yè)”的id while True:# 下拉滾動(dòng)條,使瀏覽器加載出全部的內(nèi)容,# 這里是從0開始到5結(jié)束 分5 次加載完每頁(yè)數(shù)據(jù)for i in range(0, 5):height = 20000 * i # 每次滑動(dòng)20000像素strWord = "window.scrollBy(0," + str(height) + ")"driver.execute_script(strWord)time.sleep(2)# 這里需要選中 說(shuō)說(shuō) 所在的frame,否則找不到下面需要的網(wǎng)頁(yè)元素driver.switch_to.frame("app_canvas_frame")# 解析頁(yè)面元素content = BeautifulSoup(driver.page_source, "html5lib")# 找到"feed_wrap"的div里面的ol標(biāo)簽ol = content.find("div", class_="feed_wrap").ol# 通過(guò)find_all遍歷li標(biāo)簽數(shù)組lis = ol.find_all("li", class_="feed")# 將說(shuō)說(shuō)內(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")#找到具體說(shuō)說(shuō)所在標(biāo)簽pre,獲取內(nèi)容ss_content = bd.pre.get_text()f.write(ss_content + "\n")# 當(dāng)已經(jīng)到了尾頁(yè),“下一頁(yè)”這個(gè)按鈕就沒(méi)有id了,可以結(jié)束了if driver.page_source.find('pager_next_' + str(next_num)) == -1:break# 找到“下一頁(yè)”的按鈕,因?yàn)橄乱豁?yè)的按鈕是動(dòng)態(tài)變化的,這里需要?jiǎng)討B(tài)記錄一下driver.find_element_by_id('pager_next_' + str(next_num)).click()# “下一頁(yè)”的idnext_num += 1# 因?yàn)樵谙乱粋€(gè)循環(huán)里首先還要把頁(yè)面下拉,所以要跳到外層的frame上driver.switch_to.parent_frame()復(fù)制代碼

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

詞云圖

使用wordcloud包生成詞云圖,pip install wordcloud
這里還可以使用jieba分詞,我并沒(méi)有使用,因?yàn)槲矣X(jué)得qq說(shuō)說(shuō)的句子讀起來(lái)才有點(diǎn)感覺(jué),個(gè)人喜好,用jieba分詞可以看到說(shuō)說(shuō)高頻次的一些詞語(yǔ)。
設(shè)置下wordcloud的一些屬性,注意 這里要設(shè)置font_path屬性,否則漢字會(huì)出現(xiàn)亂碼。
這里還有個(gè)要提醒的是,如果使用了虛擬環(huán)境的,不要在虛擬環(huán)境下運(yùn)行以下腳本,否則可能會(huì)報(bào)錯(cuò) 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è)置有多少種隨機(jī)生成狀態(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說(shuō)說(shuō)內(nèi)容,并生成詞云圖。
源碼github地址: github.com/taixiang/sp…

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

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

總結(jié)

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

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