본문 바로가기

Python

블라인드_기업리뷰 크롤링

크롬드라이브를 활용한 블라인드 기업리뷰 크롤링 코드입니다.

코드 작동하면 크롬이 뜨고 웹로그인 인증 후에 자동으로 기업리뷰 내용을 가져옵니다.

from selenium import webdriver

from selenium.webdriver.common.by import By

import time

import pandas as pd

import re





#https://www.teamblind.com/kr/ 에 접속 하여 기업리뷰 클릭 > 회사명 검색 회사명 클릭 후 리뷰의 상단 URL

URL = "https://www.teamblind.com/kr/company/###/reviews"

#위의 URL의 페이지의 > 버튼 클릭 후 마지막 페이지 번호 입력

lastPage =25

#이후 파일 실행 시 크롬브라우저가 자동 실행되고, 웹로그인 번호 입력이 나오면, 블라인드 앱 로그인 후 더보기 버튼 클릭 > 블라인드 웹 로그인 인증번호 입력



#크롬드라이버 파일 위치로 blindCompany.py와 같은 위치에 있어야 함

driver = webdriver.Chrome(executable_path="chromedriver.exe")



driver.get(URL)

driver.find_element(By.CLASS_NAME,"btn_signin").click()

time.sleep(30)



#컨텐츠 부분 특수문제 제거 로직

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



result = []

#저장 시 헤더 값

colname = ["총점","커리어 향상","업무와 삶의 균형","급여 및 복지","사내 문화", "경영진", "제목","직원유형","장점","단점"]





for p in range(1,lastPage+1):

    targetURL = URL +"?page="+ str(p)

    driver.get(targetURL)

    elements = driver.find_elements(By.CLASS_NAME,"review_item")

    #사이트 로딩을 위한 3초 대기로 설정해 두었으나, PC 로딩 성능에 따라서 첫번째 별점을 못가지고 오는 경우 5초 혹은 10초로 늘려서 해보길 권장함

    #그래도 안되면, 각 페이지의 첫번째 상세 점수만 수기입력....

    time.sleep(5)



    for e in elements:

        rate = e.find_element(By.CLASS_NAME,"rating")



        #rate.find_element_by_id("button2").click()

        rate.find_element(By.CLASS_NAME,"more_rating").click()



        score = rate.find_element(By.CLASS_NAME,"num").text

        score = float(score.split("\n")[1])

        # detailScores = rate.find_elements_by_css_selector("div.ly_rating > div.rating_wp> span.desc ")

        # detailScores = rate.find_elements_by_css_selector

        # ("div.more_rating > span > span > span > div.ly_rating > div.rating_wp> span.desc > i.blind")



        detailScores = e.find_elements(By.CSS_SELECTOR,"div.review_item_inr > div.rating > div.more_rating > span > span > span > div.ly_rating > div.rating_wp> span.desc > i.blind")

        title = e.find_element(By.CSS_SELECTOR,"div.review_item_inr > h3.rvtit > a").text

        status = e.find_element(By.CSS_SELECTOR,"div.review_item_inr > div.auth").text

        status = status.split("\n")[1]

        prosCons = e.find_elements(By.CSS_SELECTOR,"div.review_item_inr > div > div.parag > p > span")

        value = [score, detailScores[0].text, detailScores[1].text, detailScores[2].text, detailScores[3].text,

                 detailScores[4].text, title, status, clean_str(prosCons[0].text), clean_str(prosCons[1].text)]

        result.append(value)



        print(value)



df = pd.DataFrame(result,columns=colname)

#저장을 원하는 파일이름 넣기

df.to_excel("blind_review_###.xlsx")