python爬虫学习:爬虫QQ说说并生成词云图,回忆满满
自學過一段時間的python,用django自己做了個 網站,也用requests+BeautifulSoup爬蟲過些簡單的網站,周末研究學習了一波,準備爬取QQ空間的說說,并把內容存在txt中,讀取生成云圖。
好久不登qq了,空間說說更是幾年不玩了,里面滿滿的都是上學時候的回憶,看著看著就笑了,笑著笑著就...哈哈哈~~
無圖言虛空
當年的我還是那么風華正茂、幽默風趣...
言歸正傳,本次使用的是selenium模擬登錄+BeautifulSoup4爬取數據+wordcloud生成詞云圖
BeautifulSoup安裝
pip install beautifulsoup4
這里有beautifulsoup4 的 官方文檔
還需要用到解析器,我選擇的是html5lib解析器pip install html5lib
下表列出了主要的解析器,以及它們的優缺點:
| Python標準庫 | BeautifulSoup(markup, "html.parser") | Python的內置標準庫 執行速度適中 文檔容錯能力強 | 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語言庫 |
| html5lib | BeautifulSoup(markup, "html5lib") | 最好的容錯性 以瀏覽器的方式解析文檔 生成HTML5格式的文檔 | 速度慢 不依賴外部擴展 |
selenium模擬登錄
使用selenium模擬登錄QQ空間,安裝pip install selenium
我用的是chrom瀏覽器,webdriver.Chrome(),獲取Chrome瀏覽器的驅動。
這里還需要下載安裝對應瀏覽器的驅動,否則在運行腳本時,會提示 chromedriver executable needs to be in PATH錯誤,用的是mac,網上找的一篇下載驅動的文章,https://blog.csdn.net/zxy987872674/article/details/53082896
同理window的也一樣,下載對應的驅動,解壓后,將下載的**.exe 放到Python的安裝目錄,例如 D:\python 。 同時需要將Python的安裝目錄添加到系統環境變量里。
qq登錄頁http://i.qq.com,利用webdriver打開qq空間的登錄頁面
driver = webdriver.Chrome() driver.get("http://i.qq.com") 復制代碼打開之后右擊檢查查看頁面元素,發現帳號密碼登錄在login_frame里,先定位到所在的frame,driver.switch_to.frame("login_frame") ,再自動點擊 帳號密碼登錄 按鈕,自動輸入帳號密碼登錄,并且打開說說頁面,詳細代碼如下 friend = '' # 朋友的QQ號,**朋友的空間要求允許你能訪問**,這里可以輸入自己的qq號 user = '' # 你的QQ號 pw = '' # 你的QQ密碼# 獲取瀏覽器驅動 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操縱當前頁 driver.switch_to.default_content()# 跳到說說的url, friend可以任意改成你想訪問的空間,比如這邊訪問自己的qq空間 driver.get("http://user.qzone.qq.com/" + friend + "/311") 復制代碼
這個時候可以看到已經打開了qq說說的頁面了,注意 部分空間打開之后會出現一個提示框,需要先模擬點擊事件關閉這個提示框
tm我以前竟然還有個黃鉆,好可怕~~,空間頭像也是那么的年輕、主流... try:#找到關閉按鈕,關閉提示框button = driver.find_element_by_id("dialog_button_111").click() except:pass 復制代碼
同時因為說說內容是動態加載的,需要自動下拉滾動條,加載出全部的內容,再模擬點擊 下一頁 加載內容。具體代碼見下面。
BeautifulSoup爬取說說
F12查看內容,可以找到說說在feed_wrap這個<div>,<ol>里面的<li>標簽數組里面,具體每條說說內容在<div> class="bd"的<pre>標簽中。
至此QQ說說已經爬取下來,并且保存在了qq_word文件里
接下來生成詞云圖
詞云圖
使用wordcloud包生成詞云圖,pip install wordcloud
這里還可以使用jieba分詞,我并沒有使用,因為我覺得qq說說的句子讀起來才有點感覺,個人喜好,用jieba分詞可以看到說說高頻次的一些詞語。
設置下wordcloud的一些屬性,注意 這里要設置font_path屬性,否則漢字會出現亂碼。
這里還有個要提醒的是,如果使用了虛擬環境的,不要在虛擬環境下運行以下腳本,否則可能會報錯 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 退出了虛擬環境再跑的
至此,爬取qq說說內容,并生成詞云圖。
源碼github地址: github.com/taixiang/sp…
歡迎關注我的博客:blog.manjiexiang.cn/
歡迎關注微信號:春風十里不如認識你
總結
以上是生活随笔為你收集整理的python爬虫学习:爬虫QQ说说并生成词云图,回忆满满的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: transform css3 的使用及理
- 下一篇: 普及移动办公大业,促进数字转型升级——中