開源豆瓣系列爬蟲之用戶廣播爬蟲
點(diǎn)擊上方 月小水長 并 設(shè)為星標(biāo),第一時間接收干貨推送

豆瓣用戶主頁廣播
抓取的主要內(nèi)容是廣播里的聽、說、讀、看這四部分(不包括轉(zhuǎn)發(fā)的內(nèi)容),聽這一個又包括在聽,想聽,聽過等,所有種類比較多,同時字段又不規(guī)則,所以本次保存的文件形式不再是 csv,而是 json;我個人理解,csv 文件對應(yīng) mysql 等結(jié)構(gòu)化數(shù)據(jù)庫,json 文件對應(yīng) mongodb 等非結(jié)構(gòu)化數(shù)據(jù)庫,如果想改成 mongodb,在后文獲取代碼修改保存文件的函數(shù)即可;對于開源的東西,我傾向于使用 csv/json 文件形式保存數(shù)據(jù),一是配置少,二是直觀。這份代碼運(yùn)行保存的結(jié)果如下

保存的json文件
整個項(xiàng)目的倉庫地址是
https://github.com/Python3Spiders/DouBanSpider
{"users": ["https://www.douban.com/people/G16022222","https://www.douban.com/people/170796758"],"cur_user_index": 0,"cur_user_cur_page_index": 31}
users 就是你想爬取的用戶主頁列表,這個直接去豆瓣網(wǎng)復(fù)制就可以得到;為了避免每次都要重新開始抓取第一個用戶,字段 cur_user_index 就是為了保存上一次已經(jīng)抓取到哪一個用戶了,下次可以直接繼續(xù),這個保存過程是程序自己完成了,沒有特殊需要不用人為改動;爬蟲是基于翻頁的,cur_user_cur_page_index 保存了當(dāng)前抓取的用戶翻到哪一頁了,和 cur_user_index 組合起來就可以使用更細(xì)粒度的恢復(fù)抓取。
另外一個是需要在 py 文件中修改 Cookie,在 Chrome 開發(fā)者工具中打開 Network 欄,過濾 urlPath 的關(guān)鍵詞 statuses,復(fù)制過濾后的請求的 Cookie。

如何獲取 Cookie
程序設(shè)計(jì)了每翻頁一次休眠 3 s,測試發(fā)現(xiàn)運(yùn)行過快會導(dǎo)致下面的結(jié)果而導(dǎo)致程序中斷,這也是我為什么設(shè)置恢復(fù)抓取邏輯的原因之一,只要在網(wǎng)頁打開豆瓣輸入驗(yàn)證碼,重新運(yùn)行就能恢復(fù)抓取。

豆瓣網(wǎng)頁輸入驗(yàn)證碼
開源的代碼是最小可行性產(chǎn)品;比如出現(xiàn)驗(yàn)證碼,可以二次開發(fā)個驗(yàn)證碼識別程序自動化;為了防止出現(xiàn)驗(yàn)證碼,可以自己構(gòu)建代理池(一般免費(fèi)的代理質(zhì)量不高),或者付費(fèi)買代理 ip,無非就是構(gòu)建服務(wù),給請求添加 proxies 參數(shù)即可;為了加快速度,可以使用線程池,協(xié)程等;凡此種種,皆不是本開源爬蟲的本身,定位只是一個豆瓣備份工具而已;大家可以二次開發(fā)。
開源的目的是為了方便大家使用,有疑問請?jiān)?git 倉庫上提 issues ;同時一起貢獻(xiàn)這份爬蟲代碼,有覺得代碼設(shè)計(jì)邏輯可以改進(jìn)的或者有 bug 的,請?zhí)?pull request
歡迎體驗(yàn),吐槽。
