2018/1/21 第一次 爬取拉鉤一級頁面
1. 分析拉勾網(wǎng)頁面
拉勾網(wǎng)頁面使用ajax技術(shù)蚕捉,so,頁面內(nèi)容在Chrome-檢查-XHR中哼凯,請求方式為post锉屈。
請求頭2-1
請求頭2-2
拉鉤不同頁面是怎樣加載的呢继阻?:
經(jīng)觀察后,拉鉤翻頁呐伞,pn變動敌卓,其余不變。所以可以看出要爬取不同頁面只需要改變pn的值即可伶氢。
2.Python爬取
- 拉勾網(wǎng)請求方式為post趟径,所以使用requests包中的post方式瘪吏。
- 拉鉤加入了反爬機制,所以要requests中需加請求頭蜗巧,以盡量偽裝成瀏覽器發(fā)送請求掌眠。代碼如下:
c=[]
# 用for方法遍歷所有pn值,即所有網(wǎng)頁幕屹。
for x in range(1,31):
url='https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false&isSchoolJob=0'
#此處調(diào)用了一個uuid包蓝丙,來模擬cookie
def get_uuid():
return str(uuid.uuid4())
cookie = "JSESSIONID=" + get_uuid() + ";"
#設(shè)置請求頭
headers={
#之前設(shè)置好的動態(tài)cookie
'cookie': cookie,
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'zh-CN,zh;q=0.9',
'Connection':'keep-alive',
'Host':'www.lagou.com',
'Origin':'https://www.lagou.com',
'Referer':'https://www.lagou.com/jobs/list_bi%E4%BA%A7%E5%93%81%E7%BB%8F%E7%90%86?px=default&city=%E5%85%A8%E5%9B%BD'
}
#設(shè)置頁面請求條件
Data={
'first':'true',
'pn':1,
'kd':'bi產(chǎn)品經(jīng)理'
}
# 用requests的post方法抓取網(wǎng)頁。抓取出的為json格式望拖,用該包json方法轉(zhuǎn)換渺尘,并下鉆字典.抓取出數(shù)據(jù)
c.append(requests.post(url,headers=headers,data=Data).json()['content']['positionResult']['result'])
注意:拉鉤網(wǎng)需要設(shè)置動態(tài)cookie,從而避免被封禁IP
3. 保存數(shù)據(jù)
保存數(shù)據(jù)使用pandas包來建立一個數(shù)據(jù)框:
由上代碼可知说敏,最后c是一個包裹了多個字典的列表鸥跟,通過以下代碼將字典轉(zhuǎn)化為數(shù)據(jù)框,字典的鍵值變?yōu)榱兴饕瑅alues值變?yōu)閿?shù)據(jù)框內(nèi)的觀察值医咨,從而最后導(dǎo)出為csv。
pd.DataFrame(c)
4. 總結(jié)
4.1 爬取網(wǎng)頁注意點
-
偽裝請求:headers的設(shè)置
- user-agent必須要設(shè)置迅诬,可在瀏覽器版本信息中查找,也可在頁面請求頭中查找
- cookie的設(shè)置可以從uuid中偽裝動態(tài)cookie
- 本文中沒提到的referer應(yīng)該也可以使用婿牍。(referer是指從哪個頁面跳轉(zhuǎn)而來)
- 設(shè)置間隔時間侈贷?避免請求過快被封禁IP
-
多頁循環(huán)爬取:for循環(huán)
- 分析頁面,找出分頁加載的不同之處等脂,從而進行for循環(huán)
- for每循環(huán)一次俏蛮,即要儲存一次接下來方便解析的數(shù)據(jù),這里使用列表append方法
4.2 需加強知識點
-
全自動化輸出數(shù)據(jù)
- 此代碼尚是一個半成品:正常的應(yīng)是輸入一個網(wǎng)址上遥,返回一系列數(shù)據(jù)搏屑。此代碼需要一步一步操作。
解決方法:將代碼包裝成一個自定義函數(shù)粉楚,輸入url辣恋,返回數(shù)據(jù)。
- 此代碼尚是一個半成品:正常的應(yīng)是輸入一個網(wǎng)址上遥,返回一系列數(shù)據(jù)搏屑。此代碼需要一步一步操作。
- list與dict的使用不熟練
- 爬蟲偽裝不夠充分:cookie偽裝需再加學習模软。補充其它偽裝方法伟骨。
5. 接下來要做的事
- 爬取拉鉤二級頁面
- 創(chuàng)建函數(shù),全自動化燃异。