標籤:google cimage content with hit nis 模式 交流 ack
前言
先看:
思路
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 = True4 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空間好友說說並產生詞雲(超詳細)