效果
技術(shù)棧
- python3
- requests
- redis
- echart
源碼地址
https://github.com/MasakiOvO/...
python需要安裝的庫(kù)
requests,BeautifulSoup,redis,django
思路
兩個(gè)程序。
- 一個(gè)程序負(fù)責(zé)爬取用戶關(guān)注和粉絲列表, 并把用戶名存入set
- 另一個(gè)程序負(fù)責(zé)根據(jù)用戶名獲取詳細(xì)信息,存入hash
維護(hù) 兩個(gè)列表 1.已爬用戶 2.未爬用戶
第一個(gè)程序的流程:
當(dāng)未爬set不為空時(shí):執(zhí)行如下操作:
每次從未爬取列表中取出一個(gè)用戶名
根據(jù)用戶名,獲取他的關(guān)注與粉絲并遍歷,如果用戶既沒(méi)在已爬用戶,也沒(méi)在未爬用戶 加入未爬用戶列表。
第二個(gè)程序的流程
每次從未爬set中取出一個(gè)用戶名,調(diào)用接口獲取詳細(xì)信息并存入redis hash中
接口獲取
打開某個(gè)人的個(gè)人主頁(yè),按F12
選擇XHR 然后點(diǎn)擊圖1的關(guān)注我的人,和我關(guān)注的人,在圖2就可以看到header和cookie。
獲取用戶列表Api:
https://www.zhihu.com/api/v4/...{username}/{type}?include=data[*].answer_count,articles_count,gender,follower_count,is_followed,is_following,badge[?(type=best_answerer)].topics&offset=20&limit=20
username 是用戶名,
type 是類型, 有兩種可選 [followers,followees], followers是粉絲 followees是關(guān)注
改變offset的值可以獲取分頁(yè)
獲取個(gè)人信息Api:
https://www.zhihu.com/people/...
user_token是用戶名
這個(gè)api中 返回的是html頁(yè)面,在html頁(yè)面中有一個(gè)scirpt標(biāo)簽里面的內(nèi)容是json格式的用戶信息,這就很方便了,直接獲取鍵值對(duì) 對(duì)應(yīng)的屬性就ok。
發(fā)送請(qǐng)求
F12查看接口,把header和cookie放進(jìn)requests.get()方法中。
剩下的就很簡(jiǎn)單了,不贅述了。
總結(jié)
還有很多優(yōu)化的地方。比如加入中間件,來(lái)提升爬蟲的穩(wěn)定性。對(duì)數(shù)據(jù)進(jìn)行分類,統(tǒng)計(jì)城市分布。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
