본문 바로가기

[저장용] 임시 보관소

[Python]프로그래머스 공고 검색기

회사 별로 분류

엑셀 저장 (alt+h+o+i 눌러서 편하게 보기)

 

- todo

필터를 추가 ( front, 프론트가 제목에 있으면 제외)

기존 지원한 리스트를 기반으로 필터

원티드 용도 만들기

 

import requests
import pandas as pd
from tqdm import tqdm

def main():
    # 사용 예시
    url = "https://career.programmers.co.kr/api/job_positions"
    min_career = 4
    min_salary = 6000
    keywords = ["원격", "리모트", "재택", "제택", "remote"]

    trackable_ids = get_all_trackable_ids(url)
    job_data_list = get_all_job_position_detail(url, trackable_ids, keywords)

    # 데이터프레임 생성
    df = pd.DataFrame(job_data_list)

    # 데이터프레임을 Excel 파일로 저장
    df.to_excel("job_data.xlsx", index=False)


def get_trackable_ids(url, page, min_career=4, min_salary=6000, order="recent"):
    trackable_ids = []

    # 쿼리 파라미터 설정
    params = {
        "min_career": min_career,
        "min_salary": min_salary,
        "order": order,
        "page": page
    }

    response = requests.get(url, params=params)

    # 응답 확인
    if response.status_code == 200:
        # JSON 형식의 응답 데이터를 딕셔너리로 파싱
        data = response.json()

        # trackable_ids 추출
        trackable_ids = [item["id"] for item in data["jobPositions"]]
        total_pages = data["totalPages"]
    else:
        print("요청 실패:", response.status_code)

    return trackable_ids, page, total_pages


def get_all_trackable_ids(url, min_career=4, min_salary=6000, order="recent"):
    all_trackable_ids = []

    page = 1
    total_pages = 1

    while page <= total_pages:
        # 한 페이지만 가져오는 함수 호출
        trackable_ids, page, total_pages = get_trackable_ids(url, page, min_career, min_salary, order)

        if not trackable_ids:
            break

        # 추출한 trackable_ids를 all_trackable_ids 리스트에 추가
        all_trackable_ids.extend(trackable_ids)

        # 다음 페이지로 이동
        page += 1

    return all_trackable_ids


def get_job_position_detail(url, trackable_id, keywords):
    url = f"{url}/{trackable_id}"
    response = requests.get(url)
    info = {}
    # 응답 확인
    if response.status_code == 200:
        # JSON 형식의 응답 데이터를 딕셔너리로 파싱
        data = response.json()

        # 응답 데이터 문자열에 "원격"이 포함되어 있는지 확인
        response_text = str(data).lower()
        keyword_found = any(keyword in response_text for keyword in keywords)

        job_position = data["jobPosition"]

        company = job_position["company"]

        info["company"] = company["name"]
        info["title"] = job_position["title"]
        info["url"] = url
        info["keyword_found"] = keyword_found

        return info
    else:
        print("요청 실패:", response.status_code)


def get_all_job_position_detail(url, trackable_id_list, keywords):
    job_data_list = []
    for trackable_id in tqdm(trackable_id_list, desc="Processing"):
        job_data_list.append(get_job_position_detail(url, trackable_id, keywords))

    return sorted(job_data_list, key=lambda x: x["company"])


main()

 

'[저장용] 임시 보관소' 카테고리의 다른 글

원티드 공고 검색기  (1) 2024.02.01
프로그래머스 새탭열기  (0) 2023.11.23
[저장용] 12-06 정리할거  (0) 2022.12.07