精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用Python寫一個小白也能懂的分布式知乎爬蟲

開發 后端 分布式
很早就有采集知乎用戶數據的想法,要實現這個想法,需要寫一個網絡爬蟲(Web Spider)。因為在學習 python,正好 python 寫爬蟲也是極好的選擇,于是就寫了一個基于 python 的網絡爬蟲。

很早就有采集知乎用戶數據的想法,要實現這個想法,需要寫一個網絡爬蟲(Web Spider)。因為在學習 python,正好 python 寫爬蟲也是極好的選擇,于是就寫了一個基于 python 的網絡爬蟲。

幾個月前寫了爬蟲的初版,后來因為一些原因,暫時擱置了下來,最近重新拾起這個想法。首先優化了代碼的結構,然后在學弟的提醒下,從多線程改成了多進程,一臺機器上運行一個爬蟲程序,會啟動幾百個子進程加速抓取。

但是一臺機器的性能是有極限的,所以后來我使用 MongoDB 和 Redis 搭建了一個主從結構的分布式爬取系統,來進一步加快抓取的速度。

然后我就去好幾個服務器廠商申請免費的試用,比如百度云、騰訊云、Ucloud…… 加上自己的筆記本,斷斷續續抓取了一個多周,才采集到300萬知乎用戶數據。中間還跑壞了運行網站的云主機,還好 自動備份 起作用,數據沒有丟失,但那又是另外一個故事了……

廢話不多說,下面我介紹一下如何寫一個簡單的分布式知乎爬蟲。

抓取知乎用戶的個人信息

給大家推薦一個學習交流的地方,想要學習Python的小伙伴可以一起來學習,719+139+688,入坑需謹慎,對Python沒啥興趣的就不要來湊熱鬧啦。我們要抓取知乎用戶數據,首先要知道在哪個頁面可以抓取到用戶的數據。知乎用戶的個人信息在哪里呢,當然是在用戶的主頁啦,我們以輪子哥為例 ~

 

用Python寫一個小白也能懂的分布式知乎爬蟲

紅框里的便我們要抓取的用戶關鍵信息(的一部分)。

最上面是我們的目標URL:https://www.zhihu.com/people/excited-vczh/answers。

觀察一下這個URL的組成:

  • http://www.zhihu.com + /people + /excited-vczh + /answer

可以發現只有 excited-vczh 這部分是會變化的,它代表著知乎用戶的唯一ID,在知乎的數據格式中,它的鍵名叫做 urlToken。

所以我們可以用拼接字符串的形式,得到我們待抓取頁面的URL:

  1. url = '%s/people/%s/answers'%(host,urlToken) 

頁面URL有了,而且從上圖我們可以發現 不登錄 也可以訪問用戶主頁,這說明我們可以不用考慮模擬登陸的問題,可以自由的獲取用戶主頁面源碼。

那么我們如何從用戶主頁的源碼中獲取用戶的數據呢?一開始我以為需要挨個匹配頁面中對應的部分,但我查看源碼的時候發現知乎把用戶數據集集中放到了源碼的一個地方,那就是 id="data" 的 div 的 data-state 屬性的值中,看下圖:

 

用Python寫一個小白也能懂的分布式知乎爬蟲

從上圖我們可以發現,date-state 的屬性值中藏有用戶的信息,比如我們可以依次找到用戶的教育經歷(educations)、簡介(headline)、參與的 Live 數量(participatedLiveCount)、關注的收藏夾數量(followingFavlistsCount)、被收藏的次數(favoritedCount)、關注他的用戶數(followerCount)、關注的話題數量(followingTopicCount)、用戶描述(description)等信息。通過觀察我們也可以發現,數據應該是以 JSON 格式存儲。

知道了用戶數據都藏在 date-state 中,我們 用 BeautifulSoup 把該屬性的值取出來,然后作為 JSON 格式讀取,再把數據集中存儲用戶數據的部分提取出來即可,看代碼:

 

  1. # 解析htmls = BS(html,'html.parser')# 獲得該用戶藏在主頁面中的json格式數據集data = s.find('div',attrs={'id':'data'})['data-state' 
  2. data = json.loads(data)  
  3. data = data['entities']['users'][urlToken] 

如此,我們便得到了某一個用戶的個人信息。

抓取知乎用戶的關注者列表

剛剛我們討論到可以通過抓取用戶主頁面源碼來獲取個人信息,而用戶主頁面可以通過拼接字符串的形式得到 URL,其中拼接的關鍵是 如何獲取用戶唯一ID —— urlToken?

我采用的方法是 抓取用戶的關注者列表。

每個用戶都會有關注者列表,比如輪子哥的:

 

用Python寫一個小白也能懂的分布式知乎爬蟲

 

用Python寫一個小白也能懂的分布式知乎爬蟲

和獲取個人信息同樣的方法,我們可以在該頁面源碼的 date-state 屬性值中找到關注他的用戶(一部分):

 

用Python寫一個小白也能懂的分布式知乎爬蟲

名為 ids 的鍵值中存儲有當前列表頁的所有用戶的 urlToken,默認列表的每一頁顯示20個用戶,所以我們寫一個循環便可以獲取當前頁該用戶的所有關注者的 urlToken。

 

  1. # 解析當前頁的 html url = '%s/people/%s/followers?page=%d'%(host,urlToken,page)  
  2. html = c.get_html(url)  
  3. s = BS(html,'html.parser')# 獲得當前頁的所有關注用戶data = s.find('div',attrs={'id':'data'})['data-state' 
  4. data = json.loads(data)  
  5. items = data['people']['followersByUser'][urlToken]['ids']for item in items: if item!=None and item!=False and item!=True and item!='知乎用戶'.decode('utf8'): 
  6. node = item.encode('utf8' 
  7. follower_list.append(node) 

再寫一個循環遍歷關注者列表的所有頁,便可以獲取用戶的所有關注者的 urlToken。

有了每個用戶在知乎的唯一ID,我們便可以通過拼接這個ID得到每個用戶的主頁面URL,進一步獲取到每個用戶的個人信息。

我選擇抓取的是用戶的關注者列表,即關注這個用戶的所有用戶(follower)的列表,其實你也可以選擇抓取用戶的關注列表(following)。我希望抓取更多知乎非典型用戶(潛水用戶),于是選擇了抓取關注者列表。當時抓取的時候有這樣的擔心,萬一這樣抓不到主流用戶怎么辦?畢竟很多知乎大V雖然關注者很多,但是主動關注的人相對都很少,而且關注的很可能也是大V。但事實證明,主流用戶基本都抓取到了,看來基數提上來后,總有縫隙出現。

反爬蟲機制

頻繁抓取會被知乎封IP,也就是常說的反爬蟲手段之一,不過俗話說“道高一尺,魔高一丈”,既然有反爬蟲手段,那么就一定有反反爬蟲手段,咳,我自己起的名……

言歸正傳,如果知乎封了你的IP,那么怎么辦呢?很簡單,換一個IP。這樣的思想催生了 代理IP池 的誕生。所謂代理IP池,是一個代理IP的集合,使用代理IP可以偽裝你的訪問請求,讓服務器以為你來自不同的機器。

于是我的 應對知乎反爬蟲機制的策略 就很簡單了:全力抓取知乎頁面 --> 被知乎封IP --> 換代理IP --> 繼續抓 --> 知乎繼續封 --> 繼續換 IP..... (手動斜眼)

使用 代理IP池,你可以選擇用付費的服務,也可以選擇自己寫一個,或者選擇用現成的輪子。我選擇用七夜寫的 qiyeboy/IPProxyPool 搭建代理池服務,部署好之后,修改了一下代碼讓它只保存https協議的代理IP,因為 使用http協議的IP訪問知乎會被拒絕。

搭建好代理池服務后,我們便可以隨時在代碼中獲取以及使用代理 IP 來偽裝我們的訪問請求啦!

(其實反爬手段有很多,代理池只是其中一種)

簡單的分布式架構

多線程/多進程只是***限度的利用了單臺機器的性能,如果要利用多臺機器的性能,便需要分布式的支持。

如何搭建一個簡單的分布式爬蟲?

我采用了 主從結構,即一臺主機負責調度、管理待抓取節點,多臺從機負責具體的抓取工作。

具體到這個知乎爬蟲來說,主機上搭建了兩個數據庫:MongoDB 和 Redis。MongoDB 負責存儲抓取到的知乎用戶數據,Redis 負責維護待抓取節點集合。從機上可以運行兩個不同的爬蟲程序,一個是抓取用戶關注者列表的爬蟲(list_crawler),一個是抓取用戶個人資料的爬蟲(info_crawler),他們可以配合使用,但是互不影響。

我們重點講講主機上維護的集合,主機的 Redis 數據庫中一共維護了5個集合:

  1. waiting:待抓取節點集合
  2. info_success:個人信息抓取成功節點集合
  3. info_failed:個人信息抓取失敗節點集合
  4. list_success:關注列表抓取成功節點集合
  5. list_failed:關注列表抓取失敗節點集合

這里插一句,之所以采用集合(set),而不采用隊列(queue),是因為集合天然的帶有唯一性,也就是說可以加入集合的節點一定是集合中沒有出現過的節點,這里在5個集合中流通的節點其實是 urlToken。

(其實集合可以縮減為3個,省去失敗集合,失敗則重新投入原來的集合,但我為了測速所以保留了5個集合的結構)

他們的關系是:

 

用Python寫一個小白也能懂的分布式知乎爬蟲

舉個具體的栗子:從一個 urlToken 在 waiting 集合中出現開始,經過一段時間,它被 info_crawler 爬蟲程序從 waiting 集合中隨機獲取到,然后在 info_crawler 爬蟲程序中抓取個人信息,如果抓取成功將個人信息存儲到主機的 MongoDB 中,將該 urlToken 放到 info_success 集合中;如果抓取失敗則將該 urlToken 放置到 info_failed 集合中。下一個階段,經過一段時間后,list_crawler 爬蟲程序將從 info_success 集合中隨機獲取到該 urlToken,然后嘗試抓取該 urlToken 代表用戶的關注者列表,如果關注者列表抓取成功,則將抓取到的所有關注者放入到 waiting 集合中,將該 urlToken 放到 list_success 集合中;如果抓取失敗,將該 urlToken 放置到 list_failed 集合中。

如此,主機維護的數據庫,配合從機的 info_crawler 和 list_crawler 爬蟲程序,便可以循環起來:info_crawler 不斷從 waiting 集合中獲取節點,抓取個人信息,存入數據庫;list_crawler 不斷的補充 waiting 集合。

主機和從機的關系如下圖:

 

用Python寫一個小白也能懂的分布式知乎爬蟲

主機是一臺外網/局域網可以訪問的“服務器”,從機可以是PC/筆記本/Mac/服務器,這個架構可以部署在外網也可以部署在內網。

責任編輯:未麗燕 來源: 云棲社區
相關推薦

2016-09-30 10:13:07

分布式爬蟲系統

2021-09-07 09:26:13

Python 開發編程語言

2025-04-14 00:00:00

MCPjson 信息地理編碼

2018-07-23 08:32:49

分布式鏡像倉庫

2017-06-16 21:00:02

Python爬蟲

2025-02-26 00:48:32

2018-05-22 15:30:30

Python網絡爬蟲分布式爬蟲

2020-07-30 09:35:09

Redis分布式鎖數據庫

2022-06-27 08:36:27

分布式事務XA規范

2021-10-25 10:33:29

Python 開發編程語言

2021-06-24 10:27:48

分布式架構系統

2015-04-21 09:39:03

javajava分布式爬蟲

2017-05-24 15:07:19

Python爬蟲爬取

2014-03-12 10:42:10

equeue分布式消息隊列

2021-06-25 10:45:43

Netty 分布式框架 IO 框架

2018-05-09 09:44:51

Java分布式系統

2017-09-11 15:17:01

分布式集群負載均衡

2022-04-14 07:56:30

公平鎖Java線程

2013-09-11 16:02:00

Spark分布式計算系統

2024-02-19 00:00:00

Redis分布式
點贊
收藏

51CTO技術棧公眾號

欧美日韩国产精品一区二区三区| 91精品999| 日韩欧美在线番号| 久久综合激情| 最新91在线视频| 天天久久综合网| 欧美野外wwwxxx| 久久一日本道色综合| 国产精品久久久久久久9999| 欧美日韩午夜视频| 麻豆一区二区麻豆免费观看| 日本丰满少妇一区二区三区| 中国黄色录像片| 亚洲人视频在线观看| 青青草原综合久久大伊人精品优势| 久久精品国产清自在天天线| a天堂视频在线观看| 99久久er| 欧美日韩国产影院| 亚洲视频电影| 污视频在线免费| 国内外成人在线| 4438全国成人免费| 国产乱国产乱老熟300| 蜜臀久久99精品久久一区二区 | 真人做人试看60分钟免费| 女人18毛片一区二区三区| 日本女人一区二区三区| 久久久久久免费精品| 在线免费看视频| 网红女主播少妇精品视频| 欧美精品在线视频| 日本在线观看a| 国产探花在线观看| 综合欧美亚洲日本| 日本精品一区二区三区高清 久久| 国产高清在线观看视频| 日韩激情一区二区| 91精品国产91久久久| 男女羞羞免费视频| 99国产精品一区二区| 亚洲视频一区二区| 免费看黄色aaaaaa 片| 永久免费精品视频| 欧美一区二区播放| aaa一级黄色片| 成人自拍视频网| 欧美日韩亚洲激情| 免费无码不卡视频在线观看| 羞羞的视频在线看| 亚洲日本韩国一区| 中文字幕中文字幕一区三区| 成a人v在线播放| 国产亚洲污的网站| 美乳视频一区二区| 天堂а√在线8种子蜜桃视频 | 波多野结衣办公室33分钟| 7777精品| 337p日本欧洲亚洲大胆精品| 97中文字幕在线观看| 亚洲精品aⅴ| 欧美成人三级电影在线| 中文字幕在线观看视频www| 婷婷精品久久久久久久久久不卡| 在线中文字幕不卡| 香港日本韩国三级网站| 日本肉肉一区| 欧美日韩一级二级三级| 免费精品99久久国产综合精品应用| 天天综合网天天| 欧美在线观看你懂的| 午夜国产一区二区三区| 久久亚洲精品中文字幕| 91精品欧美久久久久久动漫 | 99精品黄色片免费大全| 国产亚洲第一区| 日本一卡二卡四卡精品| 国产拍欧美日韩视频二区| 亚洲国产精品一区二区第四页av| 春暖花开成人亚洲区| 国产精品久久久久三级| 一级特黄妇女高潮| 激情图片在线观看高清国产| 婷婷国产v国产偷v亚洲高清| 亚洲中文字幕无码中文字| 中文字幕日本一区二区| 91精品蜜臀在线一区尤物| www.四虎在线| 欧美禁忌电影网| 久久久精品一区| 国产乡下妇女做爰毛片| 久久久水蜜桃av免费网站| 国产精品88a∨| 国产美女三级无套内谢| 99精品久久久久久| 一区二区在线高清视频| 波多野结衣在线观看| 一本大道av伊人久久综合| 日本久久久久久久久久久久| 秋霞午夜一区二区三区视频| 精品视频中文字幕| 看黄色录像一级片| 国产手机视频一区二区| 国产有码一区二区| 四虎永久在线观看| 国产精品伦理一区二区| 青青在线免费观看| 激情久久一区二区| 日韩精品视频在线播放| 欧美做爰啪啪xxxⅹ性| 99国产成+人+综合+亚洲欧美| 国产精品美女免费| 国产肥老妇视频| 久久精品在线观看| 男女激情免费视频| 欧美日韩破处视频| 精品丝袜一区二区三区| 久草免费在线视频观看| 久久成人综合网| 欧美成人第一区| 人交獸av完整版在线观看| 在线观看网站黄不卡| 在线观看亚洲免费视频| 色综合狠狠操| 日韩av电影免费观看高清| 亚洲精品国产精| 国产精品视频一二三区| 中文字幕日本最新乱码视频| 欧美经典一区| 色噜噜国产精品视频一区二区| 久久国产视频播放| 成人激情av网| 欧美一区二区三区综合| 色综合视频一区二区三区44| 亚洲日本成人女熟在线观看| 中文字幕在线观看免费视频| 国产一区二区视频在线| 亚洲一区免费看| 高清成人在线| 亚洲美女av电影| 性无码专区无码| 国产iv一区二区三区| 中文字幕欧美日韩一区二区| 国产精品亚洲d| 亚洲色图色老头| 伊人中文字幕在线观看| av欧美精品.com| www污在线观看| 国产精品一线| 隔壁老王国产在线精品| www.99视频| 一区二区三区在线观看国产| 国产永久免费网站| 国产精品久久久乱弄| 国产精品专区一| 日本免费在线视频| 欧美日韩国产电影| 日韩激情小视频| 国产一区二区三区日韩| 丰满人妻一区二区三区53号| 日韩精品一区国产| 欧美黑人一级爽快片淫片高清| 国产ts变态重口人妖hd| 一区二区三区91| 大尺度做爰床戏呻吟舒畅| 在线欧美一区| 蜜桃视频日韩| 国产一区一一区高清不卡| 日韩专区中文字幕| 国产a级免费视频| 亚洲在线成人精品| 亚洲国产精品自拍视频| 久久精品系列| 在线电影看在线一区二区三区| 成人国产精品一区二区免费麻豆| www.欧美免费| 亚洲欧美另类日韩| 精品久久久中文| 人妻互换一区二区激情偷拍| 韩国成人精品a∨在线观看| 精品人妻人人做人人爽| 九九热hot精品视频在线播放| 日本不卡免费高清视频| 中文字幕在线免费| 精品日韩成人av| 日韩在线播放中文字幕| 亚洲欧美怡红院| 你懂的在线观看网站| 日韩 欧美一区二区三区| av不卡在线免费观看| 欧美一级二级三级视频| 国产精品视频不卡| 黑人另类精品××××性爽| 亚洲欧美一区二区三区情侣bbw| 亚洲天堂手机版| 亚洲综合无码一区二区| 久久美女免费视频| 国产精品一区在线| 久章草在线视频| 欧美日韩国产高清| 日韩高清三级| 盗摄牛牛av影视一区二区| 国产成人在线精品| 日本无删减在线| 在线成人激情视频| 日本黄色一区二区三区| 欧美日免费三级在线| 三级黄色在线视频| 综合电影一区二区三区| 欧美色图亚洲激情| 国产精品亚洲第一| 亚洲xxxx2d动漫1| 一本一本久久| 7777在线视频| 色琪琪久久se色| 美乳视频一区二区| 91在线一区| 成人免费自拍视频| 日韩av电影资源网| 欧美综合在线第二页| 久久99亚洲网美利坚合众国| 日韩中文字幕亚洲| 国产精品影院在线| 日韩av中文字幕在线| 精品人妻一区二区三区麻豆91| 91国偷自产一区二区三区成为亚洲经典 | 国产区精品视频| 99久久精品免费看国产小宝寻花 | 欧美日韩国产综合一区二区三区| 日本视频免费在线| 亚洲精品成a人| 午夜三级在线观看| 中文字幕一区在线| 国产精品综合激情| 欧美国产精品一区二区| 成人性生交大免费看| 91首页免费视频| 中文字幕人妻一区二区三区| 国产成人免费av在线| japan高清日本乱xxxxx| 韩国欧美国产1区| www.超碰97.com| 久久er精品视频| 一个色综合久久| 国产在线精品一区在线观看麻豆| 亚欧美在线观看| 老司机一区二区| 污网站在线免费| 激情综合五月天| 91免费视频污| 国产成人av资源| www.四虎在线| 成人激情黄色小说| 无码国产69精品久久久久网站| 黄一区二区三区| 在线观看网站黄| 国产麻豆一精品一av一免费| 欧美视频亚洲图片| 国产一区二区在线免费观看| 日韩av片免费观看| 国产精品一区二区免费不卡| 亚洲最大天堂网| 激情综合一区二区三区| 伊人av在线播放| 国产suv精品一区二区883| 久久久久久久久久久久91| 美女脱光内衣内裤视频久久网站| 日本a视频在线观看| 国产日韩欧美一区| 国产成人无码一二三区视频| 免播放器亚洲| 日韩av卡一卡二| 激情另类小说区图片区视频区| 91精品视频国产| 菠萝蜜视频在线观看一区| 李丽珍裸体午夜理伦片| 成人av网站免费| 人妻少妇无码精品视频区| 国产日韩欧美精品综合| 国产又粗又长免费视频| 亚洲精品成人a在线观看| 亚洲国产精品成人无久久精品| 舔着乳尖日韩一区| 中文字幕在线观看国产| 91精品国模一区二区三区| 国产精品视频无码| 日韩精品免费综合视频在线播放 | 99热这里都是精品| 亚洲狠狠婷婷综合久久久久图片| 国产午夜亚洲精品午夜鲁丝片| 娇妻被老王脔到高潮失禁视频| 国产精品午夜电影| 美女视频黄免费| 日韩人体视频一二区| 中文字幕第一页在线播放| 精品国产制服丝袜高跟| 日本黄在线观看| 久久激情视频久久| 女人高潮被爽到呻吟在线观看| 热久久这里只有精品| 国精品产品一区| 免费国产一区二区| 午夜影院欧美| 日韩精品―中文字幕| 久久成人久久爱| 亚洲最大免费视频| 国产精品久久久久久久久免费丝袜 | 草草视频在线| 国外成人免费在线播放| 国产亚洲精品精品国产亚洲综合| 成人乱色短篇合集| 秋霞综合在线视频| 奇米777四色影视在线看| 香蕉久久国产| 一级做a免费视频| 国产亚洲综合性久久久影院| 欧美久久久久久久久久久久| 欧美丝袜丝交足nylons| 丰满熟妇乱又伦| 色久欧美在线视频观看| 高清av不卡| 成人免费视频网站| 四虎8848精品成人免费网站| 逼特逼视频在线| 国产一区二区三区精品欧美日韩一区二区三区 | 中文字幕一二三区| 26uuu国产在线精品一区二区| 欧美人妻精品一区二区免费看| 色综合激情久久| 成人久久久精品国产乱码一区二区 | 亚洲老司机av| 中文字幕免费高清电视剧网站在线观看| 亚州av一区二区| 蜜桃在线一区| 视频一区二区视频| 欧美96一区二区免费视频| 50一60岁老妇女毛片| 亚洲午夜电影在线观看| 一级成人免费视频| 亚洲码在线观看| 日韩电影免费观| 黄色国产精品一区二区三区| 国内在线观看一区二区三区| 国产福利精品一区二区三区| 国产日韩欧美精品电影三级在线| 黄色一级视频免费看| 亚洲精品美女久久久| 成人免费一区二区三区牛牛| y111111国产精品久久婷婷| 小小影院久久| 成人不卡免费视频| 亚洲黄色小视频| 国产精品无码AV| 九九九久久国产免费| 二区三区精品| 自拍偷拍亚洲色图欧美| 激情综合色播五月| 欧美大片xxxx| 欧美美女一区二区在线观看| 免费网站免费进入在线| 国产在线久久久| 欧美网站在线| 亚洲午夜精品在线观看| 亚洲一区二区三区爽爽爽爽爽| 好吊色视频一区二区| 欧美激情一级精品国产| 首页亚洲中字| 日韩精品无码一区二区三区免费| 久久免费美女视频| 波多野结衣av无码| 正在播放国产一区| 日本一区二区乱| 黄色特一级视频| 成人一区在线看| 波多野结衣一二区| 在线精品视频视频中文字幕| 99精品在线免费观看| 日韩精品福利片午夜免费观看| 国产一区视频导航| 亚洲午夜18毛片在线看| 国产午夜精品美女视频明星a级| 毛片无码国产| 一本色道久久99精品综合| 精品一区二区在线观看| 国产一级生活片| 亚洲女人被黑人巨大进入al| 色猫猫成人app| 老司机午夜网站| 99久久99久久综合| 一级aaaa毛片| 欧美激情视频给我| 成人激情视频| 人妻av一区二区三区| 大荫蒂欧美视频另类xxxx| 色视频在线免费观看| 国产精品久久久久久久久久直播| 美女91精品| www.av成人| 日韩欧美美女一区二区三区| 向日葵视频成人app网址|