카테고리 없음

BeautifulSoup로 잡스코리아 크롤링.

_뮨 2022. 6. 29. 23:16

요즘에는 nico쌤의 파이썬 수업을 듣고 있다. 수업에서 indeed 사이트를 크롤링하였는데 그동안 업데이트되서 그런지 사이트의 한 번에 50개의 직업정보보기 같은 검색기능이 사라져서 한 페이지에 10개만 표시되었다. 그래서 그냥 잡스코리아에서 직업을 개발자로 검색하고 그중 첫 10페이지의 직업정보를 추출해보기로 했다.

!/usr/bin/env python3
from bs4 import BeautifulSoup
import requests
print('content-type: text/html; charset=utf-8\n')

먼저 python3의 경로를 표시하고 BeautifulSoup와 requests 모듈을 import 했다.

url = 'https://www.jobkorea.co.kr/Search/?stext=%EA%B0%9C%EB%B0%9C%EC%9E%90&tabType=recruit&Page_No=1'
f_url = 'https://www.jobkorea.co.kr/Search/?stext=%EA%B0%9C%EB%B0%9C%EC%9E%90&tabType=recruit&Page_'
def extract_pages():
    pages = requests.get(url)
    soup = BeautifulSoup(pages.text, 'html.parser')
    pagination = soup.find('div', {'class': 'tplPagination newVer wide'})
    pages = pagination.find_all('a')
    list = []
    for page_number in pages[:-1]:
        list.append(int(page_number.text))

    max_page = list[-1]
    return(max_page)

 

먼저 웹페이지 하단에 웹페이지수를 각각 표시하는 <a>태그를 가져와서 <a>.text->페이지수를 인것을 이용하여 for문으로  최대페이지수 10을 얻었다. (마지막 <a>태그는 다음페이지를 뜻하는 태그므로 [:-1]로 배제시켰다.)

def extract_job(css):
    company = css.find('a', {'class': 'name dev_view'})
    description = css.find('a', {'class': 'title dev_view'})
    loacl = css.find('span', {'class': 'loc long'})
    if company and description and loacl is not None:
        return f"{company.text}({loacl.text}) : {description['title']} \nhttps://www.jobkorea.co.kr/{company['href']}"

직업정보에서 회사이름, 제목, 위치, 그리고 구직페이지로 가는 링크주소를 추출했다.

그리고 "회사이름(위치) : 설명

             구직페이지 링크주소 "

형식으로 배치하였다.

def extract_final_job(last_page): 
    list = []
    for page in range(last_page):
        print(f'여기는 페이지{page+1}')
        page = requests.get(f'{f_url}No={last_page}')  
        soup = BeautifulSoup(page.text, 'html.parser')
        all_job_container = soup.find_all('div', {'class': 'post'})
        for job_container in all_job_container:
            job = extract_job(job_container)
            if job is None:
                continue
            list.append(job)
    return list

이건 모든 페이지의 정보를 다 추출해야하가에 range함수를 사용하였다.

각 페이지 링크는 url끝에 No=(페이지 수)에 따라 다르다.

마지막으로 모든 정보를 담은 배열인 list를 리턴하면 된다.