경쟁사분석을 위해 각 기업마다 가지고 있응 채용 공고의 풀을 파악할 필요가 있었다. 이에 공고의 리스트를 뽑을 필요가 있었다. 'ㅍ' 사이트의 채용 공고를 가져오는 코드를 설계했다.
가져오고 싶은 내용은
1) 각 채용 공고의 제목(ex. 프론트엔드 엔지니어, iOS 개발 (병역특례/전문연구요원 가능) 등)
2) 회사명(ex. 라프텔, 큐픽스 등)
이렇게 두 가지이며, 총 1919개의 항목이 있는 것을 확인할 수 있다.
처음에는 그냥 Copy selector를 활용해 스크래핑을 진행하려고 했는데, 실패했다.
- Copy Select 결과:
#list-positions-wrapper > ul > li > div.item-body > h5 > a
- 그냥 requests를 사용해서 받아오려고 짠 코드는 다음과 같다.
response = requests.get("https://programmers.co.kr/job") soup = BeautifulSoup(response.text, 'html.parser') posting = soup.select("#list-positions-wrapper > ul > li > div.item-body") for post in posting: title = post.select_one("h5 > a").text company = post.select_one("h6 > a").text print(title, company)
결과적으로 나온 값은 전부 'None'으로 없는 값을 가져오고 있었다는 결론이 났다.
근데 나는... Copy select로 끌어온 값인데? 하고 다시 전체 requests가 가져오는 값을 확인해보았다.
print(str(soup))
가져오려는 데이터가 DB에 올라가있는 모양, chrome driver를 사용해서 실행하면서 데이터를 따와야 할 것 같다.
import requests from bs4 import BeautifulSoup from selenium import webdriver import csv num = 2 f = open("C:/Users/lenovo/Desktop/crowling/test/data.csv", 'w', encoding = 'CP949', newline='') csvWriter = csv.writer(f) csvWriter.writerow(["공고 제목", "회사명"]) #일반 request 활용 ''' response = requests.get("https://programmers.co.kr/job") soup = BeautifulSoup(response.text, 'html.parser') posting = soup.select("#list-positions-wrapper > ul > li > div.item-body") print(str(soup)) ''' browser = webdriver.Chrome("C:/chromedriver.exe") //첫 페이지랑 그 뒤부터 주소 체계가 달라서 첫 페이지만 따로 사용 browser.get("https://programmers.co.kr/job") browser.implicitly_wait(10) posting = browser.find_elements_by_css_selector("#list-positions-wrapper > ul > li > div.item-body") for post in posting: title = post.find_element_by_css_selector("h5 > a").text company = post.find_element_by_css_selector("h6 > a").text csvWriter.writerow([title, company]) //2~95페이지까지 for num in range(2, 95, 1): browser.get(f"https://programmers.co.kr/job?page={num}") browser.implicitly_wait(10) posting = browser.find_elements_by_css_selector("#list-positions-wrapper > ul > li > div.item-body") for post in posting: title = post.find_element_by_css_selector("h5 > a").text company = post.find_element_by_css_selector("h6 > a").text csvWriter.writerow([title, company]) f.close()
예쁘게 나왔다. 웹 스크래핑 처음 해보는데, 대충 6시간 정도 걸려서 완성할 수 있었다.
댓글 영역