Python爬虫QQ说说并分析朋友状况
生活随笔
收集整理的這篇文章主要介紹了
Python爬虫QQ说说并分析朋友状况
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
今天我們要做的事情是使用動態爬蟲來爬取QQ空間的說說,并把這些內容存在txt中,然后讀取出來生成云圖,這樣可以清晰的看出朋友的狀況。
?
這是好友的QQ空間10年說說內容,基本有一個大致的印象了。
?
?
爬取動態內容
?
因為動態頁面的內容是動態加載出來的,所以我們需要不斷下滑,加載頁面
切換到當前內容的frame中,也有可能不是frame,這里需要查看具體情況
獲取頁面源數據,然后放入xpath中,然后讀取
所有的注釋都在代碼中,所以也就不作詳情說明,
爬取說說的完整代碼
?
#coding:utf-8import time from selenium import webdriver from lxml import etree#這里一定要設置編碼格式,防止后面寫入文件時報錯 import sys reload(sys) sys.setdefaultencoding( "utf-8" )friend = 'XXX' # 朋友的QQ號,朋友的空間要求允許你能訪問 user = 'XXX' ?# 你的QQ號 pw = 'XXXX' ?# 你的QQ密碼#獲取瀏覽器驅動 driver = webdriver.Firefox()# 瀏覽器窗口最大化 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你可以任意改成你想訪問的空間 driver.get("http://user.qzone.qq.com/" + friend + "/311")next_num = 0 ?# 初始“下一頁”的id while True:# 下拉滾動條,使瀏覽器加載出動態加載的內容,# 我這里是從1開始到6結束 分5 次加載完每頁數據for i in range(1,6):height = 20000*i#每次滑動20000像素strWord = "window.scrollBy(0,"+str(height)+")"driver.execute_script(strWord)time.sleep(4)# 很多時候網頁由多個<frame>或<iframe>組成,webdriver默認定位的是最外層的frame,# 所以這里需要選中一下說說所在的frame,否則找不到下面需要的網頁元素driver.switch_to.frame("app_canvas_frame")selector = etree.HTML(driver.page_source)divs = selector.xpath('//*[@id="msgList"]/li/div[3]')#這里使用 a 表示內容可以連續不清空寫入with open('qq_word.txt','a') as f:for div in divs:qq_name = div.xpath('./div[2]/a/text()')qq_content = div.xpath('./div[2]/pre/text()')qq_time = div.xpath('./div[4]/div[1]/span/a/text()')qq_name = qq_name[0] if len(qq_name)>0 else ''qq_content = qq_content[0] if len(qq_content)>0 else ''qq_time = qq_time[0] if len(qq_time)>0 else ''print qq_name,qq_time,qq_contentf.write(qq_content+"\n")# 當已經到了尾頁,“下一頁”這個按鈕就沒有id了,可以結束了if driver.page_source.find('pager_next_' + str(next_num)) == -1:break# 找到“下一頁”的按鈕,因為下一頁的按鈕是動態變化的,這里需要動態記錄一下driver.find_element_by_id('pager_next_' + str(next_num)).click()# “下一頁”的idnext_num += 1# 因為在下一個循環里首先還要把頁面下拉,所以要跳到外層的frame上driver.switch_to.parent_frame()這樣所有的說說內容就可以爬取到了。并且存到了同級目錄中
?
生成詞云
?
生成詞云需要用到的庫:
wordcloud, 生成詞云
matplotlib, 生成詞云圖片
jieba ,這個庫可用可不用,但我因為中文一直顯示不出來,后來加上了這個庫,就能顯示中文了。
轉載于:https://www.cnblogs.com/paisenpython/p/10272002.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Python爬虫QQ说说并分析朋友状况的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 05 Python 并发编程(管道,事件
- 下一篇: QTableview 获取鼠标坐标的it