爬蟲---爬取拉鈎信息網


  今天不知道寫點什么,想到金9銀10了寫一篇抓取拉勾網我們軟件測試工程師的薪資~~

 

爬取拉勾網職業信息

分析網站信息

1、打開拉勾網,輸入我們想要查找的職位

 

2、通過抓包工具或者開發者工具查看請求數據

發現是請求地址:https://www.lagou.com/jobs/positionAjax.json?city=%E4%B8%8A%E6%B5%B7&needAddtionalResult=false

通過post形式請求的,請求參數也可以看到

4、分析頁面數據

通過分析,數據已json的格式存在preview中

怎么獲取數據呢? 我們可以通過獲取返回的json內容,通過json的內容找到我們想要的數據

 

3、通過requests發送post請求

首先直接請求requests拉勾網信息,添加請求頭。

  

發現會提示請求頻繁無法獲取網站信息,那這樣怎么去搞?

前面小編寫過一個通過session會話請求的數據,那么我們今天來試試

首先請求我們網頁顯示的信息獲取cookies值,攜帶這網頁的cookies再去請求我們需要爬取的url

import requests
# 請求地址
url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E4%B8%8A%E6%B5%B7&needAddtionalResult=false'
# 請求頭
headers = {
            'Accept': "application/json, text/javascript, */*; q=0.01",
            'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
            'Referer':'https://www.lagou.com/jobs/list_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88?city=%E4%B8%8A%E6%B5%B7&cl=false&fromSearch=true&labelWords=&suginput='
    }
# 請求參數
form_data = {
            'first': 'true',
            'pn': 1,
            'kd': '軟件測試工程師'
    }
# 導入session回話
s = requests.session()
# 請求頁面地址獲取cookies
url_list = 'https://www.lagou.com/jobs/list_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88?city=%E4%B8%8A%E6%B5%B7&cl=false&fromSearch=true&labelWords=&suginput='
s.get(url_list, headers=headers)
cookie = s.cookies
# 攜帶cookies值繼續請求
response = s.post(url, data=form_data, headers=headers,cookies=cookie)
job_json = response.json()
# 獲取json數據
print(job_json)

通過觀察返回的json數據我們得知我們需要的數據都在result數據里面,那么通過json的方式我們可以提取出來,放到一個列表中,方便稍后我們寫入csv文件中

csv_data = []
    for i in job_list:
        job_info = []
        job_info.append(i['positionName'])  # 職位
        job_info.append(i['companyShortName'])  # 公司
        job_info.append(i['salary'])    # 薪資
        job_info.append(i['education'])  # 學歷
        job_info.append(i['district'])  # 位置
        job_info.append(i['workYear'])  # 工作經驗要求
        job_info.append(i['positionAdvantage'])  # 福利待遇
        csv_data.append(job_info)

4、數據寫入csv文件中

寫入csv文件寫過很多次了,基本上都是一樣的

csvfile = open('軟件職業.csv', 'a+',encoding='utf-8-sig',newline='')
    writer = csv.writer(csvfile)
    writer.writerows(csv_data)
    csvfile.close()

5、構建分頁列表,爬取全部數據

通過觀察分頁的控制是在form_data中,我們呢就模擬分頁內容,爬取全部數據

all = []
    for page_num in range(1, 30):
        result = data(page=page_num)
# 獲取一共多少個數據
        all += result
        print('已抓取{}頁, 總職位數:{}'.format(page_num, len(all)))

 

完整代碼

# coding:utf-8
import requests
import csv
import time
def data(page):
    s = requests.session()
    url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E4%B8%8A%E6%B5%B7&needAddtionalResult=false'
    headers = {
            'Accept': "application/json, text/javascript, */*; q=0.01",
            'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
            'Referer':'https://www.lagou.com/jobs/list_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88?city=%E4%B8%8A%E6%B5%B7&cl=false&fromSearch=true&labelWords=&suginput='
    }
    form_data = {
            'first': 'true',
            'pn': page,
            'kd': '軟件測試工程師'
    }
    url_list = 'https://www.lagou.com/jobs/list_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88?city=%E4%B8%8A%E6%B5%B7&cl=false&fromSearch=true&labelWords=&suginput='
    s.get(url_list, headers=headers,timeout=3)
    cookie = s.cookies
    response = s.post(url, data=form_data, headers=headers,cookies=cookie,timeout=3)
    response.raise_for_status()
    response.encoding = response.apparent_encoding
    job_json = response.json()
    job_list = job_json['content']['positionResult']['result']
    csv_data = []
    for i in job_list:
        job_info = []
        job_info.append(i['positionName'])  # 職位
        job_info.append(i['companyShortName'])  # 公司
        job_info.append(i['salary'])    # 薪資
        job_info.append(i['education'])  # 學歷
        job_info.append(i['district'])  # 位置
        job_info.append(i['workYear'])  # 工作經驗要求
        job_info.append(i['positionAdvantage'])  # 福利待遇
        csv_data.append(job_info)
    print(csv_data)
    csvfile = open('軟件職業.csv', 'a+',encoding='utf-8-sig',newline='')
    writer = csv.writer(csvfile)
    writer.writerows(csv_data)
    csvfile.close()
    return csv_data
if __name__ == '__main__':
    a = [('職位','公司','薪資','學歷','位置','工作經驗要求','福利待遇')]
    csvfile = open('軟件職業.csv', 'a+',encoding='utf-8-sig',newline='')
    writer = csv.writer(csvfile)
    writer.writerows(a)
    csvfile.close()
    all_company = []
    for page_num in range(1, 100):
        result = data(page=page_num)
        all_company += result
        print('已抓取{}頁, 總職位數:{}'.format(page_num, len(all_company)))
        time.sleep(15)  # 如果速度太快可能被網站識別出爬蟲

 

抓取的結果:

 

看到我們測試工資這么高,好心動,~~~~~

注意,不要請求太過於頻繁,會認為爬蟲封IP的。

 

如果感覺喜歡的話,右下角點個關注~~~

 


免責聲明!

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



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