Python
Jobplanet 기업리뷰 크롤링코드
5시의그림자
2022. 9. 20. 09:34
잡플래닛에 있는 기업별 리뷰페이지들을 크롤링해서 엑셀로 만들어주는 코드입니다.
import requests
from bs4 import BeautifulSoup
import pandas as pd
import re
login_url = 'https://www.jobplanet.co.kr/users/sign_in'
#email 본인 아이디, password 본인 패스워드 입력 단, 리뷰를 남겨서 전체 접근이 가능한 상태여야함
email = '###'
password = '###'
LOGIN_INFO ={
'user[email]' : email,
'user[password]' : password,
'commit' : '로그인'
}
session = requests.session()
res = session.post(login_url, data = LOGIN_INFO, verify = False)
res.raise_for_status()
result = []
def clean_str(text):
pattern = '([ㄱ-ㅎㅏ-ㅣ]+)' # 한글 자음, 모음 제거
text = re.sub(pattern=pattern, repl='', string=text)
pattern = '<[^>]*>' # HTML 태그 제거
text = re.sub(pattern=pattern, repl='', string=text)
pattern = '[^\w\s]' # 특수기호제거
text = re.sub(pattern=pattern, repl='', string=text)
text = text.replace('\r','. ')
return text
#url 은 보고싶은 기업의 리뷰 URL 이며 마지막은 ?page= 형태로 해야함, last_page는 해당 기업 리뷰의 마지막 페이지 입력
last_page = 212
for idx in range(1,last_page):
url = 'https://www.jobplanet.co.kr/companies/1322/reviews/%ED%98%84%EB%8C%80%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A7%81?page='+str(idx)
res = session.get(url)
res.raise_for_status()
soup = BeautifulSoup(res.text, 'html.parser')
count3 = 0
count4 = 0
count5 = 0
try:
for k in range(5):
reviewer_info = []
# 응답자 정보
position = soup.select('.content_top_ty2 > span.txt1')[0 + count4].text
status = soup.select('.content_top_ty2 > span.txt1')[1 + count4].text
loc = soup.select('.content_top_ty2 > span.txt1')[2 + count4].text
day = soup.select('.content_top_ty2 > span.txt1')[3+ count4].text
# 점
star_rating = soup.select('.us_star_m > div.star_score')[0+k]['style'][6:-1]
# rating 5*5
promotion = soup.select('.bl_score')[0 + count5]['style'][6:-1]
welfare = soup.select('.bl_score')[1 + count5]['style'][6:-1]
balance = soup.select('.bl_score')[2 + count5]['style'][6:-1]
culture = soup.select('.bl_score')[3 + count5]['style'][6:-1]
top = soup.select('.bl_score')[4 + count5]['style'][6:-1]
# 중심 제목
content = soup.select('h2.us_label')[0+k].text
# 장단점 경영진 의견
merit = soup.select('dl.tc_list > dd.df1 > span')[0 + count3].text
disadvantages = soup.select('dl.tc_list > dd.df1 > span')[1 + count3].text
df_tit = soup.select('dl.tc_list > dd.df1 > span')[2 + count3].text
reviewer_info = [position, status, loc, day, star_rating, promotion, welfare, balance, culture, top,clean_str(content),clean_str(merit),clean_str(disadvantages), clean_str(df_tit)]
result.append(reviewer_info)
reviewer_info=[]
count3 += 3
count4 += 4
count5 += 5
print("pass :"+str(idx)+"-"+str(k))
except :
print("fail :" + str(idx))
pass
colname = ['직무','상황','지역','작성일','총점','승진 기회 및 가능성','복지 및 급여','업무와 삶의 균형','사내문화','경영진','총평','장점','단점','바라는점']
df = pd.DataFrame(result,columns=colname)
#저장을 희망하는 파일명으로 저장
df.to_excel("jobplanet_기업명.xlsx")
print(result)