728x90

지난 포스팅에 이어서 받아온 정보들을 이용해서 각 페이지를 request 해보자.

1페이지 말고 다른 페이지를 눌러보면 주소창에 &start= 해서 숫자가 입력된걸 볼 수 있다.

1페이지당 50개의 결과를 보여주고 그 페이지는 50 * page number -1 부터 시작한다.

예를들면 1페이지는 0이니까 없어도 되고, 2페이지는 start = 50, 3페이지는 start = 100 이런식이다.

indeed에서 추출하는 역할을 하는 파일을 따로 생성하고 main.py 에서는 그 결과를 이용할 수 있게 바꿔보자.

indeed.py라는 새로운 파일을 생성하고 아래와 같이 함수형태로 바꿔준다.

indeed.py

import requests
from bs4 import BeautifulSoup

INDEED_URL = "https://kr.indeed.com/jobs?q=python&limit=50"

def extract_indeed_pages():
  result = requests.get(INDEED_URL)

  soup = BeautifulSoup(result.text,"html.parser")

  pagination = soup.find("div", {"class":"pagination"})

  links = pagination.find_all('a')

  pages =[]

  for link in links[:-1]:
    pages.append(int(link.string))
  print(pages)

  max_page = pages[-1]

  return max_page

main.py에서 indeed.py를 불러와서 출력해보자.

from indeed import extract_indeed_pages

max_indeed_pages = extract_indeed_pages()

print(max_indeed_pages)

이번에는 각 페이지마다 요청을 해서 요청 코드를 확인해보자.

main.py

from indeed import extract_indeed_pages, extract_indeed_jobs

last_indeed_pages = extract_indeed_pages()

extract_indeed_jobs(last_indeed_pages)

indeed.py

import requests
from bs4 import BeautifulSoup

LIMIT = 50
INDEED_URL = f"https://kr.indeed.com/jobs?q=python&limit={LIMIT}"
def extract_indeed_pages():
  result = requests.get(INDEED_URL)

  soup = BeautifulSoup(result.text,"html.parser")

  pagination = soup.find("div", {"class":"pagination"})

  links = pagination.find_all('a')

  pages =[]

  for link in links[:-1]:
    pages.append(int(link.string))

  max_page = pages[-1]

  return max_page


def extract_indeed_jobs(last_page):
  for page in range(last_page):
    result = requests.get(f"{INDEED_URL}&start={page*LIMIT}")
    print(result.status_code)

  return

이번에는 채용 정보를 가져와보자. 검색 탭에 보면 jobsearch-SerpJobCard 가 있다. 그 안의 title을 가져와보자.

jobsearch-SerpJobCard -> title -> <h2 ~~~ title= " 제목"> 을 가져올 것이다.

import requests
from bs4 import BeautifulSoup

LIMIT = 50
URL = f"https://kr.indeed.com/jobs?q=python&limit={LIMIT}"
def extract_indeed_pages():
  result = requests.get(URL)
  soup = BeautifulSoup(result.text,"html.parser")
  pagination = soup.find("div", {"class":"pagination"})
  links = pagination.find_all('a')

  pages =[]
  for link in links[:-1]:
    pages.append(int(link.string))

  max_page = pages[-1]

  return max_page


def extract_indeed_jobs(last_page):
  jobs = []
  # for page in range(last_page):
  result = requests.get(f"{URL}&start={0*LIMIT}")
  soup = BeautifulSoup(result.text,"html.parser")
  results = soup.find_all("div",{"class":"jobsearch-SerpJobCard"})

  for result in results:
    title = result.find("h2", {"class": "title"}).find("a")["title"]
    print(title)

  return jobs

위와 같은 방식으로 title , company, location, Link 를 가져와보자.

main.py

from indeed import extract_indeed_pages, extract_indeed_jobs

last_indeed_pages = extract_indeed_pages()

indeed_jobs = extract_indeed_jobs(last_indeed_pages)

indeed.py

import requests
from bs4 import BeautifulSoup

LIMIT = 50
URL = f"https://kr.indeed.com/jobs?q=python&limit={LIMIT}"


def extract_indeed_pages():
    result = requests.get(URL)
    soup = BeautifulSoup(result.text, "html.parser")
    pagination = soup.find("div", {"class": "pagination"})
    links = pagination.find_all('a')

    pages = []
    for link in links[:-1]:
        pages.append(int(link.string))

    max_page = pages[-1]

    return max_page


def extract_job(html):
    title = html.find("h2", {"class": "title"}).find("a")["title"]
    company = html.find("span", {"class": "company"})
    company_anchor = company.find("a")
    if company_anchor is not None:
        company = str(company_anchor.string)
    else:
        company = str(company.string)
    company = company.strip()  # 빈칸을 지워줌
    location = html.find("div", {"class": "recJobLoc"})["data-rc-loc"]
    job_id = html["data-jk"]
    return {
        "title": title,
        "company": company,
        "location": location,
        "Link": f"https://kr.indeed.com/viewjob?jk={job_id}"
    }


def extract_indeed_jobs(last_page):

  jobs = []
  for page in range(last_page):
    print(f"Scrapping page {page}")
    result = requests.get(f"{URL}&start={page*LIMIT}")
    soup = BeautifulSoup(result.text, "html.parser")
    results = soup.find_all("div", {"class": "jobsearch-SerpJobCard"})

    for result in results:
        job = extract_job(result)
        jobs.append(job)

  return jobs

 

 

728x90
300x250
WONILLISM