5.17 Refactor
indeed.com 에서 python 을 검색했을때 url 을 보면,
페이지를 바꿀 때마다 start 숫자가 바뀌는것을 알 수 있다.
2 페이지에는 start 가 10,
3 페이지에는 start 가 20 으로 바뀐다.
따라서 이 페이지의 pagination 은 여기 url 의 &start 부분이다.
기존의 아래 코드를 → def extract_indeedn_jobs(keword):
pages = get_page_count('python')
for page in range(pages):
base_url = 'https://kr.indeed.com/jobs?q='
browser.get(f'{base_url}{keyword}')
아래 처럼 바꿔준다.
pages = get_page_count('python')
for page in range(pages):
base_url = 'https://kr.indeed.com/jobs'
browser.get(f'{base_url}?q={keyword}&start={page*10}')
위에서 확인했듯이 2 페이지는 start 가 10, 3 페이지는 start 가 20 이다.
range 를 사용해서 0,1,2,3,4... 이런식으로 page 가 반복되는데,
각 페이지에 10 을 곱해서 start 숫자를 맞춰준다.
1 페이지의 주소 요청시 0 * 10 = 0
2 페이지의 주소 요청시 1 * 10 = 10
3 페이지의 주소 요청시 2 * 10 = 20
4 페이지의 주소 요청시 3 * 10 = 30
5 페이지의 주소 요청시 4 * 10 = 40
위와 같은 주소 요청 start 번호를 맞춰준다.
< 채용공고의 개수와 각 페이지 주소요청시 request 되는 구인공고 정보를 출력하는 코드 >
from requests import get
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def get_page_count(keyword):
options = Options()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
browser = webdriver.Chrome(options=options)
base_url = 'https://kr.indeed.com/jobs?q='
browser.get(f'{base_url}{keyword}')
soup = BeautifulSoup(browser.page_source,'html.parser')
search_count = soup.find('div',class_='jobsearch-JobCountAndSortPane-jobCount')
if search_count == None:
print('검색 결과 없음')
else:
search_count2 = search_count.find('span')
print(search_count2.string)
pagination = soup.find('nav',{'aria-label':'pagination'})
pages = pagination.select('div a')
count = len(pages)+1
for page in pages:
if page['aria-label'] == "Previous Page":
count = count - 1
if page['aria-label'] == "Next Page":
count = count - 1
if count >= 5:
return 5
else:
return count
def extract_indeed_jobs(keyword):
options = Options()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
browser = webdriver.Chrome(options=options)
pages = get_page_count('python')
print("Found", pages, "pages")
results = []
for page in range(pages):
base_url = 'https://kr.indeed.com/jobs'
final_url = f'{base_url}?q={keyword}&start={page*10}'
print('Requesting', final_url)
browser.get(final_url)
soup = BeautifulSoup(browser.page_source,'html.parser')
job_list = soup.find('ul', class_='jobsearch-ResultsList')
jobs = job_list.find_all('li', recursive=False)
for job in jobs:
zone = job.find('div', class_='mosaic-zone')
if zone == None:
anchor = job.select_one('h2 a')
title = anchor['aria-label']
link = anchor['href']
company = job.find('span',class_='companyName')
location = job.find('div',class_='companyLocation')
job_data = {
'link':f'https://kr.indeed.com{link}',
'company': company.string,
'location': location.string,
'position': title
}
results.append(job_data)
return results
jobs = extract_indeed_jobs('python')
print(jobs)
출력값:
1 페이지당 15개의 구인공고 정보가 올라오며,
5 페이지면 총 75개의 구인공고 정보가 올라온다.
마지막 코드
print(jobs) 를
print(len(jobs) 로 변경해서 출력한다.
75개의 구인공고 정보를 가져올수 있다는 것을 확인했다.
마지막으로 이전에 만들었던 extractors 폴더에 indeed.py 라는 새 파일을 만든다.
기존의 main.py 에서 작성했던 위 코드들을 복사하고
아래 jobs 와 print 코드를 삭제 후 indeed.py 파일에 붙여넣는다.
jobs = extract_indeed_jobs('python')
print(jobs)
최종적으로 main.py 는 비어있어야 하며
extractor 폴더 안에 indeed.py 와 이전에 만든 wwr.py (weworkremotely)파일이 있어야한다.
다음 게시물에서는 위 2개의 파일을 합쳐서 사용해본다.
'Programming > Python 웹 스크래퍼 만들기' 카테고리의 다른 글
Python webscrapper 완성 (0) | 2022.12.08 |
---|---|
Python webscrapper 파일 2개 합치기 (0) | 2022.12.07 |
Python selenium 활용해서 webscrapper 기초 제작 5 (0) | 2022.12.05 |
Python selenium 활용해서 webscrapper 기초 제작 4 (0) | 2022.12.02 |
Python selenium 활용해서 webscrapper 기초 제작 3 (0) | 2022.12.01 |