QQ空间爬虫分享(一天可抓取 400 万条数据)
代碼請(qǐng)移步GitHub:QQSpider
爬蟲(chóng)功能:
QQSpider 使用廣度優(yōu)先策略爬取QQ空間中的個(gè)人信息、日志、說(shuō)說(shuō)、好友四個(gè)方面的信息,詳細(xì)可見(jiàn)數(shù)據(jù)庫(kù)說(shuō)明。
判重使用“內(nèi)存位”判重,理論上億數(shù)量級(jí)的QQ可瞬間判重,內(nèi)存只占用400M+。
爬蟲(chóng)速度可達(dá)到單機(jī)每天400萬(wàn)條數(shù)據(jù)以上(具體要考慮網(wǎng)速、網(wǎng)絡(luò)帶寬、穩(wěn)定性等原因。我在學(xué)校是400萬(wàn)+,但在公司那邊卻只有六成的速度,普通家庭網(wǎng)絡(luò)可能會(huì)更慢)。
環(huán)境、架構(gòu):
開(kāi)發(fā)語(yǔ)言:Python2.7
開(kāi)發(fā)環(huán)境:64位Windows8系統(tǒng),4G內(nèi)存,i7-3612QM處理器。
數(shù)據(jù)庫(kù):MongoDB 3.2.0
(Python編輯器:Pycharm 5.0.4;MongoDB管理工具:MongoBooster 1.1.1)
主要使用 requests 模塊抓取,部分使用 BeautifulSoup 解析。
多線程使用 multiprocessing.dummy 。
抓取 Cookie 使用 selenium 和 PhantomJS 。
判重使用 BitVector 。
使用說(shuō)明:
啟動(dòng)前配置:
MongoDB安裝好 能啟動(dòng)即可,不需要配置。
Python需要安裝以下模塊(注意官方提供的模塊是針對(duì)win32系統(tǒng)的,64位系統(tǒng)用戶在使用某些模塊的時(shí)候可能會(huì)出現(xiàn)問(wèn)題,所以盡量先找64位模塊,如果沒(méi)有64的話再去安裝32的資源):
requests、BeautifulSoup、multiprocessing、selenium、itertools、BitVector、pymongo
另外我們需要使用到 PhantomJS,這并不是 Python 的模塊,而是一個(gè)exe可執(zhí)行文件,我們可以利用它模擬瀏覽器去獲取 Cookie 。使用方法:將 phantomjs-2.0.0-windows.zip 壓縮包里面的 phantomjs.exe 放到你的 Python 目錄下就行了。
啟動(dòng)程序:
運(yùn)行截圖:
說(shuō)說(shuō)數(shù)據(jù):
日志數(shù)據(jù):
好友關(guān)系數(shù)據(jù):
個(gè)人信息數(shù)據(jù):
數(shù)據(jù)庫(kù)說(shuō)明:
QQSpider主要爬取QQ用戶的說(shuō)說(shuō)、日志、朋友關(guān)系、個(gè)人信息。
數(shù)據(jù)庫(kù)分別設(shè)置 Mood、Blog、Friend、Information 四張表。
Mood 表:
_id:采用 “QQ_說(shuō)說(shuō)id” 的形式作為說(shuō)說(shuō)的唯一標(biāo)識(shí)。
Co-oridinates:發(fā)說(shuō)說(shuō)時(shí)的定位坐標(biāo),調(diào)用地圖API可直接查看具體方位,可識(shí)別到在哪一棟樓。
Comment:說(shuō)說(shuō)的評(píng)論數(shù)。
Like:說(shuō)說(shuō)的點(diǎn)贊數(shù)。
Mood_cont:說(shuō)說(shuō)內(nèi)容。
PubTime:說(shuō)說(shuō)發(fā)表時(shí)間。
QQ:發(fā)此說(shuō)說(shuō)的QQ號(hào)。
Source:說(shuō)說(shuō)的根源(對(duì)于轉(zhuǎn)發(fā)的說(shuō)說(shuō)),采用 “QQ_說(shuō)說(shuō)id” 的形式標(biāo)識(shí)。
Tools:發(fā)說(shuō)說(shuō)的工具(手機(jī)類(lèi)型或者平臺(tái))。
Transfer:說(shuō)說(shuō)的轉(zhuǎn)發(fā)數(shù)。
URL:說(shuō)說(shuō)的鏈接地址。
isTransfered:此說(shuō)說(shuō)是否屬于轉(zhuǎn)發(fā)來(lái)的。
Blog 表:
_id:采用 “QQ_日志id” 的形式作為日志的唯一標(biāo)識(shí)。
Blog_cont:日志內(nèi)容。
Comment:日志的評(píng)論數(shù)。
Like:日志的點(diǎn)贊數(shù)。
PubTime:日志的發(fā)表時(shí)間。
QQ:發(fā)此日志的QQ號(hào)。
Share:日志的分享數(shù)。
Source:日志的根源(對(duì)于轉(zhuǎn)發(fā)的日志),采用 “QQ_日志id” 的形式標(biāo)識(shí)。
Title:日志的標(biāo)題。
Transfer:日志的轉(zhuǎn)發(fā)數(shù)。
URL:日志的鏈接地址。
isTransfered:此日志是否屬于轉(zhuǎn)發(fā)來(lái)的。
Friend 表:
_id:采用 QQ 作為唯一標(biāo)識(shí)。
Num:此QQ的好友數(shù)(僅統(tǒng)計(jì)已抓取到的)。
Fx:朋友的QQ號(hào),x代表第幾位好友,x從1開(kāi)始逐漸迭加。
Information 表:
_id:采用 QQ 作為唯一標(biāo)識(shí)。
Age:年齡。
Birthday:出生日期。
Blog:已發(fā)表的日志數(shù)。
Blogs_WeGet:我們已抓取的日志數(shù)。
Blood_type:血型。
Career:職業(yè)。
Company:公司。
Company_address:公司詳細(xì)地址。
Company_city:公司所在城市。
Company_country:公司所在國(guó)家。
Company_province:公司所在省份。
Constellation:星座。
CurrentTime:抓取當(dāng)前信息的時(shí)間(不同時(shí)間信息會(huì)不同)。
FriendsNum:好友數(shù)(僅統(tǒng)計(jì)已抓取的)。
Gender:性別。
Hometown_city:故鄉(xiāng)所在城市。
Hometown_country:故鄉(xiāng)所在國(guó)家。
Hometown_province:故鄉(xiāng)所在省份。
Living_city:居住的城市。
Living_country:居住的國(guó)家。
Living_province:居住的省份。
Marriage:婚姻狀況。
Message:空間留言數(shù)。
Mood:已發(fā)表的說(shuō)說(shuō)數(shù)。
Mood_WeGet:我們已抓取的說(shuō)說(shuō)數(shù)。
PageView:空間總訪問(wèn)量。
Picture:已發(fā)表的照片數(shù)(包括相冊(cè)里的照片和說(shuō)說(shuō)里的照片)。
結(jié)語(yǔ):
自己一個(gè)人瞎搞了一個(gè)多星期,肯定還有很多地方不規(guī)范,不夠優(yōu)化。不足之處請(qǐng)多指出!
更新版本:《QQ空間爬蟲(chóng)分享(2016年11月18日更新)》。
轉(zhuǎn)載請(qǐng)注明出處,謝謝!(原文鏈接:http://blog.csdn.net/bone_ace/article/details/50771839)
總結(jié)
以上是生活随笔為你收集整理的QQ空间爬虫分享(一天可抓取 400 万条数据)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 勤哲服务器用户名在哪查看,勤哲服务器入门
- 下一篇: 劝学 荀 子