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