爬蟲學習筆記(2)使用MongoDB儲存拉鉤資料

江先生發表於2018-01-12

生苦短,我用Python

1、什麼是MongoDB

MongoDB是一個高效能,開源,無模式的文件型資料庫

MongoDB將資料儲存為一個文件,資料結構由鍵值(Key=>value)對組成

2、MongoDB相關安裝

Windows的安裝方法:可以借鑑小歪老師的知乎專欄:MongoDB及視覺化工具的安裝中給出了詳細的MongoDB資料庫、視覺化工具RoboMongo和MongoDB的PyCharm外掛--Mongo Plugin的安裝步驟和方法,可按照步驟安裝並測試連線,本人也是按照該教程一步一步操作的。實驗都是成功的。

3、Python用於操作MongoDB的第三方庫pymongo安裝:

爬蟲學習筆記(2)使用MongoDB儲存拉鉤資料

我這裡是已經安裝過了,所以是這樣的提示,如果未安裝,則是大致提示你安裝成功的英文。

這裡說下pip,我剛開始使用pip安裝包的時候,一直提示未能識別pip,最後我找到python的安裝目錄下:C:\Users\XXXX\XXX\XXX\XXX\Python\Python35\Scripts下,shift+滑鼠右擊,在此處開啟命令視窗,再使用pip install pymongo就成功了。

preview

preview

需要這樣使用pip是因為我沒有設定環境變數的原因。如果每次都是這樣使用pip安裝包很麻煩,所以如果你想每次隨便在哪裡開啟cmd.exe都能pip安裝包,則需要配置下環境變數:

配置流程:我的電腦(或計算機)-->右鍵屬性-->高階系統設定-->環境變數-->系統變數-->path-->點選編輯-->將在剛才shift+右鍵地方的地址複製到裡面,在隨便在一個地方開啟cmd.exe,輸入pip都可以安裝包了。

preview

爬蟲學習筆記(2)使用MongoDB儲存拉鉤資料

4、爬取拉鉤網爬蟲工程師資料並儲存到MongoDB中

1、分析網頁:想要爬取一個網站,首先必須去分析改網頁的請求結構和返回結果結構。

爬蟲學習筆記(2)使用MongoDB儲存拉鉤資料

由上圖分析可知:請求url和請求方式post。

preview

由上圖可知:請求所需要的Cookie、Referer、和User-Agent。這些都是請求需要的引數。

preview

點選response,可以看到該請求返回值,這樣看不方便,我們可以全選複製,用json轉換工具看一下:

爬蟲學習筆記(2)使用MongoDB儲存拉鉤資料

preview

preview

由上圖分析可知請求的引數:first:是否是第一頁,pn:當前頁數,kd:搜尋關鍵字

preview

由截圖分析可知,返回結果中content-->positionResult-->result中資料是我所需要的。

程式碼實現:

import requests
from pymongo import MongoClient
import time
from fake_useragent import UserAgent
client=MongoClient()
db=client.lagou
lagou=db.Reptile #建立Reptile集合,用於儲存爬取到的資料集合

headers={
    'Cookie':'',#此處寫入你分析所得的Cookie
    'Referer':''#此處寫入你分析所得的Referer
}

def get_job_info(page,kd):#加入一個職位引數kd
    for i in range(page):
        url=''#此處寫入你分析後所得的請求url
        payload={
            'first':'true',#是否是第一頁引數
            'pn':i,#當前頁數。起翻頁作用
            'kd':kd #關鍵字
        }

        ua=UserAgent()#定義生成隨機User-Agent的例項物件
        headers['User-Agent']=ua.random #使用fake-Agent隨機生成User-Agent,新增到headers
        response=requests.post(url,data=payload,headers=headers)#獲取請求結果

        if(response.status_code==200):
            job_json=response.json()['content']['positionResult']['result']#取出需要的資料
            lagou.insert(job_json)#儲存到MongoDB資料
        else:
            print('請求錯誤!')

        print('正在爬取'+str(i+1)+'頁的資料...')

if __name__=='__main__':
    get_job_info(7,'爬蟲')複製程式碼

MongoDB儲存資料成功後的結構如下圖 所示:

爬蟲學習筆記(2)使用MongoDB儲存拉鉤資料


相關文章