가을을 넘는 방법 중 하나가 밀린 공부를 하는 일이다. 부지런히 공부하기로 한다. 공부도 신념이나 생각과 마찬가지로 잃지 않는 것이다. 부를 만드는 가장 강력한 도구의 하나가 지식을 쌓는 일이다.
실습 사이트는 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://docs.python.org/3/library/index.html
https://github.com/psf/requests
https://www.indeed.com/jobs?q=python&limit=50
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
Python에서 HTTP 요청을 보내는 모듈
'개발자' 카테고리의 다른 글
티스토리 글 목록 가져오기 Open API 사용(파이선, open api) (0) | 2019.12.29 |
---|---|
C Programming Language 문법 설명 링크 (0) | 2019.12.10 |
브라우저 표 스타일 자료 쉽게 한글 표로 변환 (0) | 2019.11.04 |
atom 초기화 방법, atom 에디터 환경 초기화 (1) | 2019.10.29 |
라즈베리파이3 B+ OLED 모듈 구동하기 (0) | 2019.10.09 |
Address already in use 혹은 Bind failed 에러 해결하기 (0) | 2019.09.30 |
파이선 소켓 프로그램 2 - LoRa 외장형 모뎀으로 소켓 통신 예제 (0) | 2019.09.30 |
OSI 7 Layer 쉽게 외우는 법 (2) | 2019.09.04 |
더욱 좋은 정보를 제공하겠습니다.~ ^^