python3根據工作地點和崗位爬取拉勾網招聘信息

測試成功時間:2020年3月4日

感謝兩位博主的資料,加上我使用了融合の術,得此爬取代碼,僅用於學習使用,切不可用之於違法犯罪之事。

資料:

python成功爬取拉勾網——初識反爬(一個小白真實的爬取路程,內容有點小多)

python3 爬蟲與反爬蟲的鬥智鬥勇——2018年拉勾網的職位信息爬取

初學爬蟲,感受到爬蟲重要的是思想,分析別人的架構、數據接口的定位與請求方式分析以及抓包的使用。重要的是過程,實現語言只是工具,我還是使用python作爲學習。

話不多說,宇智波斑直接使用了須佐能乎

import json
import pandas
import requests
import time

headers = {
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Referer': 'https://www.lagou.com/jobs/list_java?labelWords=&fromSearch=true&suginput=',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}


url_request = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'  # network -> headers中顯示的請求鏈接


def get_lagou(job_position, job_address):
    job_info = []
    # url = 'https://www.lagou.com/jobs/positionAjax.json?'
    url_html = 'https://www.lagou.com/jobs/list_' + job_position + '?labelWords=&fromSearch=true&suginput='  # 網頁顯示訪問鏈接

    # 表示 頁碼 1-50頁
    for i in range(1, 50):
        params = {
            'city': job_address,
            'first': 'true' if i == 1 else 'false',
            'pn': i,
            'kd': job_position
        }

        # 創建一個session對象
        s = requests.Session()
        # 發送請求,獲得cookies
        s.get(url_html, headers=headers, data=params, timeout=4)
        cookie = s.cookies

        res = s.post(url_request, data=params, headers=headers, cookies=cookie, timeout=4)  # 注意分析網頁數據獲取格式
        res.encoding = res.apparent_encoding
        text = json.loads(res.text)

        for j in range(15):  # 每頁數據只有1條
            info = text['content']['positionResult']['result'][j]

            company_full_name = info["companyFullName"]
            position_name = info["positionName"]
            salary = info["salary"]
            company_size = info["companySize"]
            skill_lables = info["skillLables"]
            create_time = info["createTime"]
            district = info["district"]
            station_name = info["stationname"]

            print("數據爬取成功:" + company_full_name + " " + position_name + " " + salary + " " + str(skill_lables) + " " + create_time)
            job_info.append(text['content']['positionResult']['result'][j])  # 職位信息具體的json存放位置

    print("------------------")
    print("數據爬取結束,正在生成excel文檔......")
    df = pandas.DataFrame(job_info)  # 利用pandas將列表表格化
    now = time.strftime('%Y-%m-%d %H-%M-%S', time.localtime())  # 以系統當前時間將爬取職位信息存放至本地csv文件
    df.to_csv(now + '.csv', encoding='gb18030')  # 將表格化數據永久化存儲到本地csv文件
    print("生成成功!")


if __name__ == '__main__':
    address = input('請輸入工作地點:>')
    job = input('請輸入職位:>')
    get_lagou(job, address)

運行結果如下:

 

總結:

     除了上面提到的思想的提升,還有就是提高對python、python庫的熟練程度。

     python跟java很相似,但也有所不同。python中的文件無需像java類一樣聲明類名與文件名一致,直接編寫即可運行,方法名需要用def聲明,參數沒有變量類型,使用冒號:  和對齊最左邊即可確定方法域,有嚴格的空格與換行標準,tab鍵也決定了代碼的歸屬,每一行代碼無需用分號結束,換行即代表結束。

總之,深刻的體會了一把python的精簡與強大!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章