Python爬蟲拉勾網 以北京地區資料分析為例

2021-09-22 19:41:35 字數 3497 閱讀 8536

拉勾作為典型的網際網路公司,其資料內容或其形式的所需性,常常成為很多爬蟲新手或資料分析職位的人練習爬蟲的目標**。也是由於其目標靶向性太強,拉勾經過重重改版變的愈加難爬。對於新手的我,真的是踩過了所有的坑,才能上岸啊。回頭看看,其實也不過是反爬機制太強,我們只要做好反反爬就好了。

目標**資料原理-拉勾網

資料解析

資料爬取

總結爬取網路資料一定首先要清楚其儲存原理和結構才知道如何去爬,也才好爬。

資料儲存的方式:

清楚拉勾的資料原理機制,接下來就需要具體看看他們具體的資料儲存位置。

這是北京地區的資料分析檢索頁面,

用chrome檢查開啟。在xhr中可以看到乙個以postionajax.json開頭的指令碼,開啟preview看一下,可以看到

可以發現這些資料與前端的資料一致,此時我們已經找到了資料入口,提取需要的資料。

1.header資訊提取

出現這種情況的可能原因是你操作太頻繁,ip被封。 但是在這裡不單單是這個原因,拉勾網在開放前期,頻頻被扒,加強了其防禦的機制,這裡就裡就是其中一條,也就是你明明操作並不頻繁,但只要通過這種位址解析頁面就無法顯示。解決的方法就是:在你登入後,在你的headers中新增上登入後的cookies,或者直接request.session.cookies得到首頁的cookie.我在headers直接新增request headers中的cookies仍是無法解決,所以選擇了後者。

# 請求首頁獲取cookies 

s = requests.session()

s = s.get(url_start, headers=headers, proxies=proxies,timeout=3) # 請求首頁獲取cookies

cookie = s.cookies # 為此類別獲取的cookies

requests.post(url_parse,headers=headers,data=data,proxies=proxies,cookies=cookie,timeout=5)
一級反反爬機制,將**請求偽裝成瀏覽器請求,防止反爬,同樣你也可以多選取幾個隨機選擇,構造更加強壯的反爬機制。

def get_agents():

agents = [

]agent = random.sample(agents,1) #隨機選取其中乙個

return agent

設定請求頭,抓取json包資料

def get_json(city,keyword,gm,pn):

#kd是搜尋的關鍵字,若改為「資料分析」即是資料分析相關的資料

data =

url_parse,url_start = get_url(city,keyword,gm)

agent = get_agents()

headers = get_headers(url_start,agent)

proxies = get_proxies()

print(proxies)

# 請求首頁獲取cookies

s = requests.session()

s = s.get(url_start, headers=headers, proxies=proxies,timeout=3) # 請求首頁獲取cookies

cookie = s.cookies # 為此類別獲取的cookies

response = requests.post(url_parse,headers=headers,data=data,proxies=proxies,cookies=cookie,timeout=5)

sleep_time = random.randint(4,5)+random.random()

time.sleep(sleep_time)

# print(response.text)

text = json.loads(response.text)

return text

解析json包資料,儲存在list中,並以cs儲存在本地

def get_info(city,keyword,gm,totalpages):

city = city

keyword = keyword

totalpages = totalpages

position_info_all = #儲存資料

for page in range(1,totalpages+1):

time_start = time.time()

text = get_json(city,keyword,gm,page)

# print(text)

# print(proxies)

if 'content'in text:

info = text["content"]["positionresult"]["result"]

for i in info:

position_info_single =

print("第%s頁爬取成功,position_info_all現有資料%s行"%(str(page),str(len(position_info_all))))

else:

print("not exits")

sleep_time = random.randint(5,15)+random.random()

time.sleep(sleep_time)#keyerror問題的解決

time_end = time.time()

on_time = time_end-time_start

print("本頁爬行時間%s"%str(on_time))

return position_info_all

1 拉勾網以動態網頁的ajax形式儲存資料,需要解析json包,以post獲取資料

2.多層反爬機制

1)需要登入爬取,故需要獲取cookie,記錄登入狀態。博主以session形式獲取

2)連續爬取3頁資料機被封,故需要設定sleep.time不要短時間內多次訪問,keyerror錯誤提示也是這麼解決的

3)設定proxies 的ip**池或函式,隨機抓取ip,每一頁迴圈變化一次,以防被封。需要注意的是,每次重換ip,均需重新獲取首頁的cookies。同理設定user-agent迴圈函式。

博主是乙個90後的雙胎寶媽,多年沒寫過**,從0學期,只為了記錄下自己的學習過程,以便防止自己孕傻忘記,作為今後參考筆記。如有問題,往各位大佬們多多指教,謝謝。全部的**整理後續後續附上鏈結。

爬蟲 拉勾網 selenium

使用selenium進行翻頁獲取職位鏈結,再對鏈結進行解析 會爬取到部分空列表,感覺是網速太慢了,加了time.sleep 還是會有空列表 1 from selenium import webdriver 2import requests 3importre4 from lxml import et...

Python爬蟲獲取拉勾網招聘資訊

之前寫過乙份爬取拉勾網搜尋 資料分析 相關職位的文章拉勾網職位資訊爬蟲練習 最近入職了一家設計為主的公司,所以想做乙份關於 設計 的資料分析報告,發現直接跑原來的 會爬不到資料,所以稍微修改了一下。本篇主要記錄爬蟲 匯入使用的庫 import requests from bs4 import bea...

node爬蟲抓取拉勾網資料

初始化 1.安裝了node 2.新建乙個資料夾 3.在該資料夾中初始化node應用 npm init安裝依賴 使用express框架 使用superagent庫 superagent 是乙個輕量級 漸進式的請求庫,內部依賴 nodejs 原生的請求 api,適用於 nodejs 環境 使用cheer...