Project using python/Jobs scrapper

Extract jobs from Stack Overflow

Cog Factory 2020. 12. 21. 11:49

scrapperSO.py

import requests
from bs4 import BeautifulSoup

def extract_job(html):
  # title, company, location, link
  title_link = html.find('h2').find('a',{'class':'s-link'})
  title = title_link['title']
  link = f"https://stackoverflow.com/jobs/{title_link['href']}"
  company, location = html.find('h3', {"class":"fs-body1"}).find_all('span', recursive=False)
  return {
    "title" : title,
    "link" : link,
    "company" : company.get_text(strip=True),
    "location" : location.get_text(strip=True)
  }

def extract_jobs(last_page,url):
  jobs=[]
  for page in range(last_page):
    result = requests.get(f"{url}&pg={page+1}")
    soup = BeautifulSoup(result.text, "html.parser")
    results = soup.find_all("div",{"class":"-job"})
    for result in results:
      job = extract_job(result)
      jobs.append(job)
  return jobs

def get_SOJobs(word):
  url = f"https://stackoverflow.com/jobs?q={word}"
  last_page = get_last_page(url)
  jobs = extract_jobs(last_page, url)
  return jobs 

   Stack Overflow의 내가 검색한 language에 대한 마지막 페이지를 구했다면 url과 같이 extract_jobs에 넘겨준다. extract_jobs()는 페이지당 일자리를 모두 scrap 한다. extract_job()에서는 회사의 {title, company link, company name, location}을 구하고 반환한다.

scrapperJobs.py

from scrapperSO import get_SOJobs

jobs = get_SOJobs("python")
print(jobs) 

   scrapperJobs에서 일자리 사이트에서 모든 일자리를 구할 것이다. SO외에도 remoteok.io와 weworkremotely에서도 일자리를 구할 것이다.

참고 자료

소스 코드

github.com/zpskek/web_scraper-v2/commit/98c20b819f7ab6e722c60741216a11e9c460ef37