前言 先看效果圖: 思路 1.確認訪問的URL 2.模擬登錄你的QQ號 3.判斷好友空間是否加了許可權,切換到說說的frame,爬取當前頁面數據,下拉滾動條,翻頁繼續獲取 爬取的內容寫入本地TXT文件中 4.爬取到最後一頁,讀取TXT文件從而生成詞雲 具體分析 1.確認訪問的URL 這就很簡單了,我們 ...
前言
先看效果圖:
思路
1.確認訪問的URL
2.模擬登錄你的QQ號
3.判斷好友空間是否加了許可權,切換到說說的frame,爬取當前頁面數據,下拉滾動條,翻頁繼續獲取 爬取的內容寫入本地TXT文件中
4.爬取到最後一頁,讀取TXT文件從而生成詞雲
具體分析
1.確認訪問的URL
這就很簡單了,我們通過觀察發現,QQ空間好友的URL:
https://user.qzone.qq.com/{好友QQ號}/311
2.我們在請求的時候會遇到模擬登錄,也就是要通過Selenium+瀏覽器登錄你的QQ號後才能訪問你好友的QQ空間
下麵是模擬登錄的代碼:
1 file = 'C:/Users/Administrator/Desktop/{}.txt'.format(qq) 2 driver = webdriver.Firefox() 3 driver.maximize_window() #視窗最大化 4 5 driver.get('https://user.qzone.qq.com/{}/311'.format(qq)) #URL 6 driver.implicitly_wait(10) # 隱示等待,為了等待充分載入好網址 7 driver.find_element_by_id('login_div') 8 driver.switch_to_frame('login_frame') #切到輸入賬號密碼的frame 9 driver.find_element_by_id('switcher_plogin').click()##點擊‘賬號密碼登錄’ 10 driver.find_element_by_id('u').clear() ##清空賬號欄 11 driver.find_element_by_id('u').send_keys('你的QQ賬號')#輸入賬號 12 driver.find_element_by_id('p').clear()#清空密碼欄 13 driver.find_element_by_id('p').send_keys('你的QQ密碼')#輸入密碼 14 driver.find_element_by_id('login_button').click()#點擊‘登錄’ 15 driver.switch_to_default_content() #跳出當前的frame,這步很關鍵,不寫會報錯的,因為你登錄後還要切刀另一個frame
需要強調是 driver.switch_to_default_content() ,表示跳出當前的frame,這步很關鍵,因為你登錄後還要切刀另一個frame。不寫的話會出現下麵的錯誤:
3.第三部分我分幾個點來說:
(1).判斷空間是否加了許可權
1 try: 2 driver.find_element_by_id('QM_OwnerInfo_Icon')#判斷是否QQ空間加了許可權 3 b = True 4 except: 5 b = False
(2)切換到說說的frame,這個大家都會找吧
(3)下拉滾動條
下拉滾動條是為了點擊‘下一頁’,下拉到可見視圖。下拉滾動條要註意一點:
一定要對應它的frame,不要在爬取說說的frame下拉。
1 #分4此下拉,確保能下拉到底部 2 for j in range(1, 5): 3 driver.execute_script("window.scrollBy(0,5000)") 4 time.sleep(2)
(4)爬取說說數據,這就簡單了吧?我用的xpath獲取的說說的title,感興趣的朋友可以把時間等數據一起獲取
1 selector = etree.HTML(driver.page_source) 2 title = selector.xpath('//li/div/div/pre/text()')
(5).翻頁
直接點擊‘下一頁’即可。
1 driver.find_element_by_link_text(u'下一頁').click()
(6).txt數據寫入,不用多說,爬取到title了直接寫入
1 for i in title: 2 if not os.path.exists(file): 3 print('創建TXT成功') 4 5 with open(file, 'a+') as f: 6 f.write(i + '\n\n') 7 f.close()
4.生成詞雲,這隻是普通的模式,想具體瞭解可以看我以前文章或者Google
1 def get_wordcloud(file): 2 3 4 f = open(file, 'r', encoding='gbk').read() 5 6 # 結巴分詞,生成字元串,wordcloud無法直接生成正確的中文詞雲 7 cut_text = " ".join(jieba.cut(f)) 8 9 wordcloud = WordCloud( 10 # 設置字體,不然會出現口字亂碼,文字的路徑是電腦的字體一般路徑,可以換成別的 11 font_path="C:/Windows/Fonts/simfang.ttf", 12 # 設置了背景,寬高 13 background_color="white", width=2000, height=1380).generate(cut_text) 14 15 plt.imshow(wordcloud, interpolation="bilinear") 16 plt.axis("off") 17 plt.show() 18#Python學習交流群:548377875
由於時間問題,此篇文章只支持輸入一個好友的QQ號,你要是想爬取你的所有的QQ好友的說說,可以現在QQ郵箱獲取你所有好友的QQ號,然後生成一個數組,依次獲取就可以了。