상세 컨텐츠

본문 제목

[웹 스크래핑] 채용 공고 사이트 내용 스크래핑

프로그래밍/프로젝트

by montgras 2022. 2. 20. 21:18

본문

반응형

경쟁사분석을 위해 각 기업마다 가지고 있응 채용 공고의 풀을 파악할 필요가 있었다. 이에 공고의 리스트를 뽑을 필요가 있었다. 'ㅍ' 사이트의 채용 공고를 가져오는 코드를 설계했다.

 

가져오고 싶은 내용은

1) 각 채용 공고의 제목(ex. 프론트엔드 엔지니어, iOS 개발 (병역특례/전문연구요원 가능) 등)

2) 회사명(ex. 라프텔, 큐픽스 등)

이렇게 두 가지이며, 총 1919개의 항목이 있는 것을 확인할 수 있다.

 

[Try]

처음에는 그냥 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))

원 사이트에서 본 코드

 

print한 코드, 받은 제안 이후의 내용이 다르다

가져오려는 데이터가 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시간 정도 걸려서 완성할 수 있었다.

 

반응형

댓글 영역