爬虫实战-python爬取QQ群好友信息
自從開始學(xué)習(xí)爬蟲后,總是無法控制那一顆躁動的心。每天總是想要爬點(diǎn)什么,爬過電影、爬過電影影評、爬過圖片(美女圖)、爬過視頻鏈接,從最初的簡單解析網(wǎng)頁到模擬登陸再到異步加載,現(xiàn)在看到一個網(wǎng)頁最先想的就是要不要爬一下。話不多說,來我們今天的項(xiàng)目,通過模擬登陸和異步加載爬一下QQ群成員的信息。
大概思路
我們通過網(wǎng)頁版QQ群管理去獲取相應(yīng)的群信息,通過點(diǎn)擊QQ群首頁上的“群管理”進(jìn)入到QQ群頁面,分析鏈接我們發(fā)現(xiàn)每一個QQ群的鏈接形式都是“https://qun.qq.com/member.html#gid=”加上群號碼,這樣就為我們爬蟲減少了一定的工作量。在爬騰訊的網(wǎng)站最大的問題就是登錄,我們不能像入門時的簡單的發(fā)出登錄請求包,獲取cookies后再用cookies來訪問,騰訊的網(wǎng)站是異步加載的,這有的去分析監(jiān)聽network和js請求來找到想要的加載,十分麻煩。所以我們采用selenuim,不需要去找請求,直接模擬登錄就可以了,登陸后直接獲取到網(wǎng)頁的源碼,然后像簡單的爬蟲一樣去解析源碼獲取我們想要的內(nèi)容。
一、模擬登陸
首先通過selenuim定義一個driver對象,這里我使用的是火狐瀏覽器,直接通過下面的命令即可調(diào)用
driver?=?webdriver.Firefox()定義好了以后,我們通過下面的函數(shù)瀏覽器打開我們的想要爬取QQ群的鏈接,QQ群的鏈接形式是“https://qun.qq.com/member.html#gid=”+群號碼
driver.get(url)打開以后網(wǎng)頁會自動為我們彈出二維碼,這就不用我們?nèi)ツM點(diǎn)擊了,直接用手機(jī)qq掃描二維碼即可登錄,然后就可以看到我們想要爬取QQ群的群成員信息。有成員網(wǎng)名、群名片、QQ號、性別、Q齡、入群時間以及最后發(fā)言時間等信息。
二、下拉加載頁面
登錄到QQ群成員界面后,網(wǎng)頁上顯示的只有20個左右的人數(shù),當(dāng)網(wǎng)頁下拉時,每次更新會加載20個成員的信息,我們爬取需要所有人的信息就需要模擬下拉界面,這時候selenuim另一個功能出現(xiàn)模擬下拉加載頁面
def?scroll_foot(driver):js="var?q=document.documentElement.scrollTop=100000"return?driver.execute_script(js)三、保存網(wǎng)頁源碼
通過selenuim里的driver.page_source來獲取網(wǎng)頁源碼,我們可以將源碼保存到本地txt文件中,這樣可以方便對源碼解析,避免每次登陸的麻煩。
#獲取源碼 res?=?driver.page_source #關(guān)閉瀏覽器 driver.quit() #保存源碼 with?open('html.txt',?'w',?encoding='utf-8')?as?f:f.write(res) f.close()四、提取信息
相信到了這一步很多小伙伴都十分熟悉了,這一步就是我們剛接觸爬蟲時分析網(wǎng)頁一樣。這里我們使用BeautifulSoup來解析源碼。依次獲取群成員的信息。
from?bs4?import?BeautifulSoupwith?open('html.txt',?'r',?encoding='utf-8')?as?f:res?=?f.read() soup?=?BeautifulSoup(res,"lxml") html?=?soup.select("td") #number為群成員數(shù) for?i?in?range(number):print("群成員:",html[i*10+2].text.replace("\t",?"").replace("\n",?""))print("群名片:",html[i*10+3].text.replace("\t",?"").replace("\n",?""))print("QQ號:",html[i*10+4].text.replace("\t",?"").replace("\n",?""))print("性別:",html[i*10+5].text.replace("\t",?"").replace("\n",?""))print("Q齡:",html[i*10+6].text.replace("\t",?"").replace("\n",?""))print("入群時間:",html[i*10+7].text.replace("\t",?"").replace("\n",?""))print("最后發(fā)言:",html[i*10+8].text.replace("\t",?"").replace("\n",?""))至此,爬蟲就結(jié)束了。由于涉及群成員信息,就不展示爬蟲結(jié)果,想試試的伙伴可以根據(jù)上面的步驟爬一下自己的QQ群好友信息。更多機(jī)器學(xué)習(xí)算法的學(xué)習(xí)歡迎關(guān)注我們。對機(jī)器學(xué)習(xí)感興趣的同學(xué)歡迎大家轉(zhuǎn)發(fā)&轉(zhuǎn)載本公眾號文章,讓更多學(xué)習(xí)機(jī)器學(xué)習(xí)的伙伴加入公眾號《python練手項(xiàng)目實(shí)戰(zhàn)》,在實(shí)戰(zhàn)中成長。
?
?
總結(jié)
以上是生活随笔為你收集整理的爬虫实战-python爬取QQ群好友信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果打字怎么换行_iPhone实用小技巧
- 下一篇: PS证件照(一):PS如何调整图片像素大