python爬虫学习:爬虫QQ说说并生成词云图,回忆满满
自學(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):
| 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ù) |
| html5lib | BeautifulSoup(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)簽中。
至此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)境再跑的
至此,爬取qq說(shuō)說(shuō)內(nèi)容,并生成詞云圖。
源碼github地址: github.com/taixiang/sp…
歡迎關(guān)注我的博客:blog.manjiexiang.cn/
歡迎關(guān)注微信號(hào):春風(fēng)十里不如認(rèn)識(shí)你
總結(jié)
以上是生活随笔為你收集整理的python爬虫学习:爬虫QQ说说并生成词云图,回忆满满的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: transform css3 的使用及理
- 下一篇: 太白教你学python---博客分类目录