精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人性生交视频免费观看| 久久资源av| www日韩在线| 超碰97久久国产精品牛牛| 午夜久久久久久久久| 精选一区二区三区四区五区| 日韩精选在线观看| 一二三区不卡| 日韩精品视频在线播放| 狠狠躁狠狠躁视频专区| 99热国产在线| 成人动漫一区二区三区| 日韩av片电影专区| 中国毛片直接看| 日本在线中文字幕一区| 欧美精品一二三区| 欧美a v在线播放| 日本在线免费网| 成人a区在线观看| 国产日韩欧美日韩| 亚洲欧美综合另类| 欧美激情综合色综合啪啪| 亚洲精品有码在线| 色婷婷狠狠18禁久久| 日本在线中文字幕一区二区三区| 一区二区三区四区乱视频| 先锋在线资源一区二区三区| 日本高清视频网站| 老司机精品视频一区二区三区| 98精品国产高清在线xxxx天堂| 久久精品亚洲a| 亚洲伊人春色| 精品福利二区三区| 中文字幕精品一区二区三区在线| 一本大道色婷婷在线| 亚洲精品乱码久久久久久久久| 久久综合九色欧美狠狠| 亚洲狼人综合网| 国产在线精品一区二区夜色 | 欧美 日本 国产| 免费观看亚洲天堂| 欧美久久久久中文字幕| av免费中文字幕| 国产亚洲成av人片在线观看 | 日日噜噜夜夜狠狠久久丁香五月 | 中文字幕日本一区| 色狠狠桃花综合| 国产精品沙发午睡系列| 国产福利电影在线播放| 亚洲午夜免费福利视频| 欧美日韩dvd| 中文字幕在线播放网址| 综合久久久久久久| 欧美日韩在线免费观看视频| 最新97超碰在线| 国产精品美女久久久久久久久| 欧美日产一区二区三区在线观看| 深夜福利视频一区| 成+人+亚洲+综合天堂| 国产精品区免费视频| 亚洲成人久久精品| 成人18精品视频| 国内精品国语自产拍在线观看| 婷婷开心激情网| 波多野结衣中文一区| 国产美女99p| 蜜臀久久精品久久久久| 成人午夜激情片| 精品国产综合久久| 伦理片一区二区三区| 国产色婷婷亚洲99精品小说| 亚洲bbw性色大片| 国产在线高清| 亚洲欧美另类小说| 亚洲乱码日产精品bd在线观看| 懂色av一区| 狠狠色狠狠色综合日日五| 日本在线观看a| 丰满少妇一区| 欧美一区二区三区免费| 野战少妇38p| 国内精品久久久久久99蜜桃| 日韩一区二区欧美| 久草视频手机在线观看| 国产日韩欧美一区在线| 国产精品黄色影片导航在线观看| 亚洲专区在线播放| 国产mv日韩mv欧美| 欧美一区二区三区四区在线观看地址| 成人高清免费在线播放| 亚洲人成精品久久久久久| 99色这里只有精品| 日本韩国欧美| 欧美一区二区三区小说| 私密视频在线观看| 999久久久91| 性欧美长视频免费观看不卡 | 欧美福利一区二区| 香蕉在线观看视频| 精品免费一区二区| 欧美激情视频网址| 国产天堂第一区| 国产成人一区在线| 日韩女优中文字幕| 免费电影网站在线视频观看福利| 欧美色欧美亚洲高清在线视频| 色免费在线视频| 国产一区二区三区不卡av| 中文字幕精品www乱入免费视频| 久久97人妻无码一区二区三区| 狂野欧美性猛交xxxx巴西| 91在线视频九色| 青青青手机在线视频观看| 综合av第一页| 欧美黑人又粗又大又爽免费| 91精品丝袜国产高跟在线| 国产亚洲精品久久久久久| 久久久久久久久久91| 蜜臀av性久久久久蜜臀av麻豆 | 在线免费av播放| 国产 日韩 欧美 综合 一区| 精品国偷自产在线| 国产主播第一页| 99视频在线观看一区三区| 最近中文字幕免费mv| 成人自拍视频网| 日韩电影在线观看中文字幕| 久草免费在线视频观看| 国产一本一道久久香蕉| 涩涩日韩在线| 美女福利一区二区三区| 亚洲激情在线观看| 久久久久久av无码免费网站| 韩日av一区二区| 日本一区二区三区四区高清视频| 麻豆网站免费在线观看| 精品国产伦一区二区三区观看方式 | 99re热视频精品| 高清无码视频直接看| 激情不卡一区二区三区视频在线| 国产亚洲视频在线观看| 丁香社区五月天| av一区二区三区黑人| 久草视频这里只有精品| 欧美系列精品| 日韩在线视频中文字幕| 中文文字幕一区二区三三| 91免费版在线看| 黄色免费观看视频网站| 天海翼精品一区二区三区| 91国自产精品中文字幕亚洲| 日本精品一二区| 香蕉成人啪国产精品视频综合网| 91人人澡人人爽| 亚洲午夜精品久久久久久app| 99超碰麻豆| 大菠萝精品导航| 日韩激情视频在线| 精品不卡一区二区| 久久精品夜色噜噜亚洲aⅴ| 凹凸日日摸日日碰夜夜爽1| 视频一区在线观看| 国产欧美精品一区二区| 日本www在线观看视频| 欧美精品自拍偷拍动漫精品| 男人在线观看视频| 国产精品一区二区在线观看不卡| 麻豆映画在线观看| 国产精品jk白丝蜜臀av小说| 91极品视频在线| 每日更新在线观看av| 欧美艳星brazzers| 黄色片子在线观看| 国产成人aaa| 欧美三级一级片| 日韩精品久久| 99国产超薄丝袜足j在线观看 | 国产精品99久久精品| 96pao国产成视频永久免费| 少女频道在线观看免费播放电视剧| 欧美tk—视频vk| 久久国产黄色片| 国产精品免费人成网站| 亚洲妇女无套内射精| 亚洲一区二区免费看| 日韩妆和欧美的一区二区| 欧美黄页免费| 欧美大片在线看| 青青青草网站免费视频在线观看| 欧美日韩国产经典色站一区二区三区| 欧美色图亚洲视频| 91首页免费视频| 在线黄色免费看| 亚洲精品影视| 中文字幕欧美人与畜| 超碰97成人| 国产噜噜噜噜噜久久久久久久久| 欧美理论电影| 在线免费观看羞羞视频一区二区| 成人福利小视频| 欧洲国内综合视频| 精品深夜av无码一区二区老年| 久久久国产一区二区三区四区小说 | 欧美精品一区二区三区一线天视频 | 91人成网站www| 女海盗2成人h版中文字幕| 日韩中文字幕在线精品| 亚欧在线观看视频| 69堂国产成人免费视频| 精品人妻一区二区三区潮喷在线| 亚洲免费观看高清完整版在线 | 国产一伦一伦一伦| 亚洲区国产区| 少妇熟女一区二区| 国产不卡一二三区| 鬼打鬼之黄金道士1992林正英| 外国电影一区二区| 97av在线视频免费播放| 影音先锋男人资源在线| 在线看日韩欧美| 日中文字幕在线| 欧美xxxxxxxxx| 国产精品久久久久久久久久久久久久久久久久 | 四虎永久国产精品| 国内精品偷拍视频| 亚洲图片欧美综合| 免费精品在线视频| 国产午夜亚洲精品不卡| 精品熟女一区二区三区| 国产在线播放一区| 亚洲欧美激情网| 午夜一级久久| 少妇av一区二区三区无码| 亚洲经典一区| 中文字幕一区二区三区四区五区 | 欧美一级片免费观看| 盗摄牛牛av影视一区二区| 91精品久久久久久| 国产三级一区| 国产精品九九九| 芒果视频成人app| 日韩av免费在线| 成人直播视频| 日韩av手机在线| 2022成人影院| 日韩女在线观看| 黑人巨大精品欧美一区二区桃花岛| 久久久噜噜噜久久中文字免| 青春草免费在线视频| 欧美激情aaaa| 成人在线高清免费| 久久久这里只有精品视频| 色呦呦久久久| 久久人人爽人人爽人人片av高请| 欧美色图天堂| 性欧美暴力猛交69hd| 国产伦子伦对白在线播放观看| 午夜精品久久久久久99热| 精品丝袜在线| 日韩美女免费视频| 九九热线视频只有这里最精品| 日韩免费在线视频| 欧美成人免费全部网站| 91福利视频导航| 这里视频有精品| 国产三区精品| 你懂的一区二区三区| 日韩中文一区二区三区| 香港欧美日韩三级黄色一级电影网站| 中文字幕第50页| 国产精品vip| 波多野结衣乳巨码无在线| 视频一区二区三区中文字幕| 中文字幕成人在线视频| 国产精品自拍一区| 色婷婷精品久久二区二区密| 久久久久久久久久美女| 粉嫩精品久久99综合一区| 最新中文字幕一区二区三区| 久久久久99精品成人片毛片| 欧美日韩国产丝袜美女| 中文字幕免费高清在线观看| 欧美一区二区福利视频| 无码国产精品高潮久久99| 一区二区三区回区在观看免费视频| 午夜看片在线免费| 精品中文字幕在线观看| 一级毛片久久久| 91久久国产婷婷一区二区| 国产精品巨作av| 日韩在线电影一区| 亚洲性色视频| 成人免费在线观看视频网站| 国产91色综合久久免费分享| 素人fc2av清纯18岁| 亚洲日本在线视频观看| 国产午夜精品麻豆| 亚洲一区二区三区四区精品| 国产成人亚洲精品狼色在线| 天堂久久久久久| 国产精品乱人伦| 久久久全国免费视频| 日韩欧美国产一区二区| 国产免费av观看| 日韩精品视频免费在线观看| 国产成人无吗| 日韩av免费在线观看| 日韩一区二区三区精品| 日本成人三级电影网站| 综合视频在线| 污污视频网站免费观看| 国产91精品精华液一区二区三区 | 亚洲精品男人的天堂| 91麻豆精品久久久久蜜臀| 色猫av在线| 欧美激情精品久久久久| 欧美高清影院| 女女同性女同一区二区三区91| 欧美日韩专区| 日韩av自拍偷拍| 国产丝袜在线精品| 日本一区二区三区四区五区| 91精品国产欧美一区二区18| 大乳在线免费观看| 97超级碰碰人国产在线观看| 亚洲一区 二区| 精品一区二区成人免费视频| 日本 国产 欧美色综合| 国产ts丝袜人妖系列视频| 亚洲自拍偷拍图区| 99久久国产免费| 精品国产一区二区三区久久久| 欧美粗大gay| 欧美日韩高清在线一区| 亚洲一区二区三区免费在线观看| 少妇伦子伦精品无吗| 樱花草国产18久久久久| 国产视频在线一区| 理论片在线不卡免费观看| 日本电影久久久| 一区二区三区电影| 免费日本视频一区| 久久久久久成人网| 在线观看一区不卡| 成人在线免费公开观看视频| 国产精品99久久久久久久久久久久| 国产欧美一区二区精品久久久| 一本大道熟女人妻中文字幕在线 | 精品人妻一区二区三区四区| 欧美三级免费观看| 神马久久久久| 日本最新高清不卡中文字幕| 国产成人三级| 日韩欧美xxxx| 欧美国产精品久久| 国产精品成人无码| 中文字幕久热精品视频在线| 8av国产精品爽爽ⅴa在线观看| 天堂va久久久噜噜噜久久va| 久久精品国产网站| 国产免费久久久久| 欧美α欧美αv大片| 蜜桃视频www网站在线观看| 蜜桃在线一区二区三区精品| 久久青草久久| 欧美成人短视频| 91精选在线观看| 久草免费在线色站| 久久精品国产理论片免费| 视频一区在线视频| 欧美一级片在线视频| 日韩欧美高清一区| 无遮挡在线观看| 日韩尤物视频| 国产高清精品在线| 香蕉免费毛片视频| 亚洲偷熟乱区亚洲香蕉av| 日韩精品第二页| 999久久欧美人妻一区二区| 91看片淫黄大片一级在线观看| 最新在线中文字幕| 欧美另类交人妖| 小嫩嫩12欧美| 精品久久久99| 亚洲va韩国va欧美va| 成人不用播放器| 99精品国产高清一区二区| 午夜一区在线| 99久久99久久精品国产| 亚洲精品第一页| 日韩美香港a一级毛片| 97在线国产视频| 国产精品你懂的在线欣赏| 欧美 日韩 国产 成人 在线 91| 国产精品99蜜臀久久不卡二区| 欧美破处大片在线视频| 久久精品—区二区三区舞蹈| 欧美一区二区黄| 福利一区二区三区视频在线观看| 亚洲色成人www永久在线观看|