개발이야기/Python

Python - Indeed Scrapper 만들기

쪼린이 2021. 6. 3. 21:09

이번에는 VS Code를 이용하여 코드를 작성하지 않고 replit.com에서 진행했다.

(파이썬을 오늘 처음 접하는 나는, VS Code에 파이썬 환경을 설치해보려 했지만 많은 에러로 인해 결국 replit에서 진행하게 되었다..ㅠㅠ)

 

Go 강의했던 크롤링 코드를 파이썬으로 다시 한 번 작성하는 거라 많은 주석을 써놓지는 않았지만, 웹에 작성해놓은 코드가 날아가는 불상사를 막기 위하여 현재까지 작성한 코드를 그냥 붙여넣어 보려한다.

 

import requests
from bs4 import BeautifulSoup

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

def extract_indeed_pages():

  result = requests.get(URL)
  soup = BeautifulSoup(result.text, "html.parser")
  # find -> 첫 번째 해당 태그를 리턴
  pagination = soup.find("div", {"class":"pagination"})
  # find_all -> 해당하는 모든 태그를 리턴
  links = pagination.find_all("a")
  pages = []
  for link in links[:-1]:
    pages.append(int(link.string))
  #pages = pages[0:-1] #list의 0번째부터 마지막 -1번째까지 출력
  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"})
  co_anchor = company.find("a")
  if co_anchor is not None:
    company = str(co_anchor.string)
  else :
    company = str(company.string)
  #양 끝에 있는 문자를 제거해주는 라이브러리 함수 (괄호안에 있는 문자 - 공백포함)
  company = company.strip()
  location = html.find("div", {"class":"recJobLoc"})["data-rc-loc"]
  # 내부에 있는 attr를 찾을 때는 대괄호를 사용
  job_id = html["data-jk"]
  
  return {'title': title, "company": company, "location": location, "link": f"https://www.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

 

이건 호출하는 main.py에 있는 코드

 

from indeed import extract_indeed_pages, extract_indeed_jobs

last_page = extract_indeed_pages()

indeed_jobs = extract_indeed_jobs(last_page)
#print(last_page)
#print(extract_indeed_jobs(last_page))
print(indeed_jobs)

 

지금까지 중에 파이썬이 가장 어려운 느낌이 드는 건 왜..일까?

집중을 못 해서 그런 것 같기도 하고..😂

 

다음 강의는 좀 더 열심히 들어야겠다.

오늘은 여기까지!