Python爬取拉鈎招聘網數據


0 需求

爬取拉勾網(https://www.lagou.com/)上與“嵌入式軟件”關鍵字有關的職位信息。

 

 

1 分析

在網頁的源代碼中搜索我們所要的信息(公司名稱等),無匹配,說明是數據動態獲取的

打開檢查工具,重新刷新網頁,從Network下抓取到的包中找到返回數據的包。(可以使用XHR和JS標簽過濾)

到這里基本上是成功了一半了,剩下的就要看網站的反爬機制有多給力了

 

 

我們切換到Headers標簽看這個數據包的頭部信息:

請求的URL:https://www.lagou.com/jobs/positionAjax.json?px=default&city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false

請求的方式:POST(與GET相比,請求數據是在FormData中,可能有加密)

(這里比較良心,類似沒有加密的數據)

請求頭:有可能需要加上,cookies有可能會制造麻煩/(ㄒoㄒ)/~~

 

 

分析到這,就可以開始寫代碼了,遇到問題解決問題(ง •_•)ง

 

2 爬取

一開始肯定要假設它沒有設置什么反爬機制,寫好URL、Headers和FormData,直接調用requests.post()

過程我就不多敘述了,直接說遇到的問題:我們如上操作后會發現返回的數據是“您訪問太頻繁了”

但事實上我們根本就沒有訪問很頻繁,這便是網站設置的反爬機制,這種現象的專業名詞叫——投毒

 

FormData既然沒有加密數據,那么可以判定問題基本上是出在cookie上了

既然用固定的cookie不行,通過http請求和cookie的交互過程,我們就必須找到set-cookie的過程

(圖片來源:https://www.cnblogs.com/fanying/p/11650034.html

 

 

重新回到拉勾網的頁面,清除掉現有的cookie(我是chrome,方法如下)

 

 

 

 

 這時我們再刷新一下頁面,分析抓到的包(找set-cookie的包啊(๑•̀ㅂ•́)و✧)

 你得找到這個包啊,注意名字不一定是這個,但是一定是有Set-Cookie參數的啊

 

 

得到了cookie了,剩下的簡單了,可以封裝一個函數執行一個get請求獲取cookie,將返回的cookie加入post請求的參數,就能獲取到你想要的數據了

 

 

 

3 數據的處理

得到了數據,按理說我們要對數據進行篩選-提取,這里我沒有特別的需求,僅僅是為了學習,就直接存一些關鍵信息到csv文件吧。

需要的可以用pandas、pycharts等工具進行可視化處理。

 

4 代碼

 

# -*- encoding: utf-8 -*-
'''
@File    :   lagou.py
@Time    :   2020/03/30 22:12:38
@Author  :   bAdblocks 
@Version :   1.0
@Contact :   betterWL@hotmail.com
'''

# here put the import lib
import json
import requests
import pprint # 格式化打印

url = "https://www.lagou.com/jobs/positionAjax.json?px=default&city=%E6%B7%B1%E5%9C%B3&needAddtionalResult=false"
headers = {
# "Cookie": getCookie(),
"Host": "www.lagou.com",
"Origin": "https://www.lagou.com",
"Referer": "https://www.lagou.com/jobs/list_%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6/p-city_215?px=default", # 防盜鏈
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36",
"X-Anit-Forge-Code": "0",
"X-Anit-Forge-Token": "None",
"X-Requested-With": "XMLHttpRequest"
}

form_data = {
"first": "false",
"pn": "1",# 頁碼
"kd": "嵌入式軟件"
}

def getCookie():
    cookie_url = "https://www.lagou.com/jobs/list_%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6/p-city_215?px=default"
    cookie_headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
    }
    cookie_r = requests.get(cookie_url,headers=cookie_headers)

    return cookie_r.cookies

cookies = getCookie()

r = requests.post(url=url, data=form_data, headers=headers,cookies=cookies)
print(r.text)

data
= r.json() with open('職位信息.csv',mode="w+",encoding="utf-8") as f: header = ['職位名稱', '公司全稱', '公司規模', '薪資'] f.write(','.join(header)) f.write('\n') for item in position_data: d = [item['positionName'], item['companyFullName'],item['companySize'], item['salary']] f.write(','.join(d)) f.write('\n')

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM