본문 바로가기

개발자

Python으로 웹 스크래퍼 만들기 1

반응형

  가을을 넘는 방법 중 하나가 밀린 공부를 하는 일이다. 부지런히 공부하기로 한다. 공부도 신념이나 생각과 마찬가지로 잃지 않는 것이다. 부를 만드는 가장 강력한 도구의 하나가 지식을 쌓는 일이다.

 

실습 사이트는 repl.it 에서 직접 파이선을 코딩하여 실습한다. 놀랄 정도가 아니라 기절할 수준이다. 예술도 이런 예술이 없다. 아름다운 파이선 코드에 홀딱 반한 첫날이다! 

 

프로젝트 개요: indeed.com 구직사이트에서 "python" Job을 원하는 사람들을 50개씩 20페이지를 엑셀 파일 csv 형태로 저장하여 나오게 하는 작업이다. 동영상을 보며 한 줄 한 줄 타이핑하며 결과를 확인한다. 시키는 대로 하고, 따라 하라는 대로 한다. 교육을 받는 사람에게 이해는 나중에 온다고 믿는다. 우선은 같은 결과를 두 눈으로 확인하는 일이 우선이다. 포스트 마지막에 함께 학습하면서 방문한 모든 사이드를 나열했으니 참고하시길. 물론 필자가 참고하려고 남겨둔다. 

 

아래 파일이 main.py 코드다.

from indeed import extract_indeed_pages, extract_indeed_jobs 

last_indeed_page =  extract_indeed_pages()

indeed_jobs = extract_indeed_jobs(last_indeed_page )

 

함수 작성한 파일은 indeed.py 코드가 아래에 있다.

import requests
from bs4 import BeautifulSoup

LIMIT = 50
URL = f"http://www.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 = {page*LIMIT}")
    print(result.status_code)
  return jobs  

 

결과는 콘솔에 출력된다. 현재까지는 다음과 같다. 

200 
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200
200

 

여기까지 잘 따라왔다. 아래는 모든 데이터를 반환하는 코드

import requests
from bs4 import BeautifulSoup

LIMIT = 50
URL = f"http://www.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("div", {"class": "title"}).find("a")["title"]
  company = html.find("span", {"class": "company"})
  company_anchor = company.find("a")
  if company_anchor is not None: #strip use space eliminate
    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"]
  #print(job_id)
  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"Scarapping 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)
      #print(job)
  return jobs  

 

위 코드를 실행하면 아래와 같은 결과를 얻는다. 이렇게 열공한 적이 어느 땐가? 가을엔 그저 공부나~ 집에 가자.

Scarapping page 0
Scarapping page 1
Scarapping page 2
Scarapping page 3
Scarapping page 4
Scarapping page 5
Scarapping page 6
Scarapping page 7
Scarapping page 8
Scarapping page 9
Scarapping page 10
Scarapping page 11
Scarapping page 12
Scarapping page 13
Scarapping page 14
Scarapping page 15
Scarapping page 16
Scarapping page 17
Scarapping page 18
Scarapping page 19

 

도움 링크

https://repl.it/

https://docs.python.org/3/library/index.html

https://stackoverflow.com/

https://github.com/psf/requests

https://www.indeed.com/jobs?q=python&limit=50

https://www.crummy.com/software/BeautifulSoup/bs4/doc/

 

 

 

 Python에서 HTTP 요청을 보내는 모듈

 

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩