Python多進(jìn)程抓取拉鉤網(wǎng)十萬數(shù)據(jù)

準(zhǔn)備

安裝Mongodb數(shù)據(jù)庫

其實不是一定要使用MongoDB,大家完全可以使用MySQL或者Redis颜及,全看大家喜好辨液。這篇文章我們的例子是Mongodb,所以大家需要下載它比庄。

在Windows中求妹。由于MongoDB默認(rèn)的數(shù)據(jù)目錄為C:\data\db,建議大家直接在安裝的時候更改默認(rèn)路徑為C:\MongoDB.

然后創(chuàng)建如下目錄文件:

C:\data\log\mongod.log? //用于存儲數(shù)據(jù)庫的日志

C:\data\db??? //用于存儲數(shù)據(jù)庫數(shù)據(jù)

然后在C:\MongoDB文件夾下(安裝 Mongodb 路徑)創(chuàng)建配置文件mongod.cfg佳窑。并且在配置文件里寫入以下配置:

大家記住要打開文件后綴名制恍,不然我們可能創(chuàng)建了一個mongod.cfg.txt文件。

最后我們需要打開管理員權(quán)限的 CMD 窗口神凑,執(zhí)行如下命令净神,安裝數(shù)據(jù)庫成服務(wù):

"C:\mongodb\bin\mongod.exe"--config "C:\mongodb\mongod.cfg"--install

設(shè)置為服務(wù)后,需要在管理員權(quán)限打開的windows cmd窗口用服務(wù)的方式啟動或停止MongoDB溉委。

net start mongodb??? //啟動mongodb服務(wù)

net stop mongodb???? //關(guān)閉mongodb服務(wù)

好了鹃唯,安裝好Mongodb數(shù)據(jù)庫后,我們需要安裝PyMongo瓣喊,它是MongoDB的Python接口開發(fā)包坡慌。

pip install pymongo

推薦下我自己創(chuàng)建的Python學(xué)習(xí)交流群960410445,這是Python學(xué)習(xí)交流的地方藻三,不管你是小白還是大牛洪橘,小編都?xì)g迎,不定期分享干貨棵帽,包括我整理的一份適合零基礎(chǔ)學(xué)習(xí)Python的資料和入門教程熄求。

開始

準(zhǔn)備完成后,我們就開始瀏覽拉勾網(wǎng)逗概。我們可以發(fā)現(xiàn)拉勾網(wǎng)所有的招聘職位都在左側(cè)分類里弟晚。如圖:

我們先獲取首頁HTML文件:

然后我們打開開發(fā)者工具,找到招聘職業(yè)的位置仗谆。

大家還記得BeautifulSoup的CSS選擇器吧指巡,我們直接使用.select()方法獲取標(biāo)簽信息淑履。

輸出結(jié)果:

[<a class="curr"href="https://www.lagou.com/zhaopin/Java/"data-lg-tj-cid="idnull"data-lg-tj-id="4O00"data-lg-tj-no="0101">Java</a>, <a class="curr"href="https://www.lagou.com/zhaopin/C%2B%2B/"data-lg-tj-cid="idnull"data-lg-tj-id="4O00"data-lg-tj-no="0102">C++</a>, # ... 省略部分 https://www.lagou.com/zhaopin/fengxiankongzhizongjian/" data-lg-tj-cid="idnull" data-lg-tj-id="4U00" data-lg-tj-no="0404">風(fēng)控總監(jiān), https://www.lagou.com/zhaopin/zongcaifuzongcai/" data-lg-tj-cid="idnull" data-lg-tj-id="4U00" data-lg-tj-no="0405">副總裁]

260

獲取到所有職位標(biāo)簽的a標(biāo)簽后隶垮,我們只需要提取標(biāo)簽的href屬性和標(biāo)簽內(nèi)內(nèi)容,就可以獲得到職位的招聘鏈接和招聘職位的名稱了秘噪。我們準(zhǔn)備信息生成一個字典狸吞。方便我們后續(xù)程序的調(diào)用。

這里我們用zip函數(shù)指煎,同時迭代兩個list蹋偏。生成一個鍵值對。

接下來我們可以隨意點擊一個職位分類至壤,分析招聘頁面的信息威始。

分頁

我們首先來分析下網(wǎng)站頁數(shù)信息。經(jīng)過我的觀察像街,每個職位的招聘信息最多不超過 30 頁黎棠。也就是說晋渺,我們只要從第 1 頁循環(huán)到第 30 頁,就可以得到所有招聘信息了脓斩。但是也可以看到有的職位招聘信息木西,頁數(shù)并不到 30 頁。以下圖為例:

如果我們訪問頁面:https://www.lagou.com/zhaopin/Java/31/

也就是第 31 頁随静。我們會得到 404 頁面八千。所以我們需要在訪問到404頁面時進(jìn)行過濾。

ifresp.status_code ==404:

????pass

這樣我們就可以放心的 30 頁循環(huán)獲得每一頁招聘信息了燎猛。

我們的每一頁url使用format拼接出來:

link ='{}{}/'.format(url, str(pages))

獲取信息


獲取到全部信息后恋捆,我們同樣的把他們組成鍵值對字典。

組成字典的目的是方便我們將全部信息保存到數(shù)據(jù)庫扛门。

保存數(shù)據(jù)

保存數(shù)據(jù)庫前我們需要配置數(shù)據(jù)庫信息:

這里我們導(dǎo)入了pymongo庫鸠信,并且與MongoDB建立連接,這里是默認(rèn)連接本地的MongoDB數(shù)據(jù)论寨。創(chuàng)建并選擇一個數(shù)據(jù)庫lagou星立,并在這個數(shù)據(jù)庫中,創(chuàng)建一個table葬凳,即url_list绰垂。然后,我們進(jìn)行數(shù)據(jù)的保存:

ifurl_list.insert_one(data):

????print('保存數(shù)據(jù)庫成功', data)

如果保存成功火焰,打印出成功信息劲装。

多線程爬取

十萬多條數(shù)據(jù)是不是抓取的有點慢,有辦法昌简,我們使用多進(jìn)程同時抓取占业。由于Python的歷史遺留問題,多線程在Python中始終是個美麗的夢纯赎。

我們把之前提取職位招聘信息的代碼谦疾,寫成一個函數(shù),方便我們調(diào)用犬金。這里的parse_link()就是這個函數(shù)念恍,他就收職位的 url 和所有頁數(shù)為參數(shù)。我們get_alllink_data()函數(shù)里面使用for循環(huán) 30 頁的數(shù)據(jù)晚顷。然后這個作為主函數(shù)傳給多進(jìn)程內(nèi)部調(diào)用峰伙。

這里是一個pool進(jìn)程池,我們調(diào)用進(jìn)程池的map方法.

map(func, iterable[,chunksize=None])

多進(jìn)程Pool類中的map方法该默,與Python內(nèi)置的map函數(shù)用法行為基本一致瞳氓。它會使進(jìn)程阻塞,直到返回結(jié)果栓袖。需要注意匣摘,雖然第二個參數(shù)是一個迭代器锅锨,但在實際使用中,必須在整個隊列都就緒后恋沃,程序才會運(yùn)行子進(jìn)程必搞。join()

方法等待子進(jìn)程結(jié)束后再繼續(xù)往下運(yùn)行,通常用于進(jìn)程間的同步.

反爬蟲處理

如果大家就這樣整理完代碼囊咏,直接就開始抓取的話恕洲。相信在抓取的不久后就會出現(xiàn)程序中止不走了。我剛剛第一次中止后,我以為是網(wǎng)站限制了我的 ip。于是我做了如下改動丐怯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市泌类,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌底燎,老刑警劉巖刃榨,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異双仍,居然都是意外死亡枢希,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門朱沃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苞轿,“玉大人,你說我怎么就攤上這事逗物“嶙洌” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵翎卓,是天一觀的道長契邀。 經(jīng)常有香客問我,道長莲祸,這世上最難降的妖魔是什么蹂安? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任椭迎,我火速辦了婚禮锐帜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘畜号。我一直安慰自己缴阎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布简软。 她就那樣靜靜地躺著蛮拔,像睡著了一般述暂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上建炫,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天畦韭,我揣著相機(jī)與錄音,去河邊找鬼肛跌。 笑死艺配,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衍慎。 我是一名探鬼主播转唉,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稳捆!你這毒婦竟也來了赠法?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤乔夯,失蹤者是張志新(化名)和其女友劉穎砖织,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體末荐,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镶苞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鞠评。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茂蚓。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖剃幌,靈堂內(nèi)的尸體忽然破棺而出聋涨,到底是詐尸還是另有隱情,我是刑警寧澤负乡,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布牍白,位于F島的核電站,受9級特大地震影響抖棘,放射性物質(zhì)發(fā)生泄漏茂腥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一切省、第九天 我趴在偏房一處隱蔽的房頂上張望最岗。 院中可真熱鬧,春花似錦朝捆、人聲如沸般渡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驯用。三九已至脸秽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝴乔,已是汗流浹背记餐。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留薇正,地道東北人剥扣。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像铝穷,于是被迫代替她去往敵國和親钠怯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容