1. 程式人生 > >Python爬取QQ空間好友說說並生成詞雲(超詳細)

Python爬取QQ空間好友說說並生成詞雲(超詳細)

near 當前 面數據 請求 range 頁面 blank sleep 點擊

前言

先看效果圖:
技術分享圖片

思路

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號,然後生成一個數組,依次獲取就可以了。

Python爬取QQ空間好友說說並生成詞雲(超詳細)