# line48 - 55
#키워드 검색
searchbox = driver.find_element(By.CLASS_NAME, "input_search")
if searchbox != driver.find_element(By.CLASS_NAME, "input_search"):
raise ValueError("search box not found")
searchbox.send_keys(f"{keyword}")
wait.until(EC.presence_of_element_located((By.CLASS_NAME, "button_search")))
searchbox.send_keys(Keys.ENTER)
wait.until(EC.presence_of_element_located((By.ID, "searchIframe")))
위 코드에서, searchbox를 찾은 뒤 keyword를 입력하게 되는데,
이때 class가 "button_search"인 요소가 나타날 때까지 기다린 후 엔터를 입력하여 검색하게 됩니다.
개발자도구로 html을 살펴보면, class가 "button_search"인 요소는 검색어 입력 여부와 상관 없이 항상 존재합니다.
반면, 그 밑에 class가 "btn_clear"인 요소는 input에 검색어가 입력되었을 때 나타나게 되는 요소입니다.
요소를 기다리는 목적이 검색 요청(엔터)을 보낼 준비가 되었는지 확인하는 것이라면, input에 검색어가 있을 때만 나타나는 해당 요소를 기다리는 것이 더 적절할 것으로 보입니다.
review 관련
review 위치 파악 관련 주석 추가
# line 98 - 111
#review 위치 파악
if rate is not None and new is None:
if len(reviews) == 2:
review = reviews[1].text
elif len(reviews) > 2:
review = reviews[2].text
elif rate is None and new is not None:
if len(reviews) > 2:
review = reviews[2].text
elif rate is None and new is None:
if len(reviews) == 2:
review = reviews[0].text
elif len(reviews) == 1:
review = None
리뷰 위치를 파악하는 데 여러 케이스가 있어 위와 같이 분리한 것으로 보여집니다.
다만, 주석을 추가한다면 각각이 어떤 케이스인지 이해하기 수월할 것 같습니다.
review 컬럼명 변경
현재 review 컬럼명은 "리뷰"이나, 수집되는 데이터는 리뷰 개수로 보입니다.
컬럼명을 "리뷰 수"로 수정하고, 데이터에서 "리뷰" 문자열을 제거하는 것이 좋을 것 같습니다.
예: "리뷰 999+" → "999+"
추가로 별점도 "별점" 문자열을 제외한 순수 별점만 수집하는 것이 좋아 보입니다.
예: "별점4.71" → "4.71"
review 샘플 데이터 추가
추가적으로 수집할 수 있는 항목을 보자면, 매장 리뷰 샘플이 있을 것 같습니다.
확인 결과, 약 3개 정도의 샘플 리뷰를 노출시키는 것으로 보입니다.
해당 데이터들을 "리뷰1", "리뷰2", "리뷰3" 컬럼을 추가하여 수집하면 좋을 것 같습니다.
그렇다면 foods를 찾는 코드를 수정해야겠죠.
현재는 아래와 같이 매장 정보 중 일부만을 foods에 할당하고 있습니다.
foods = soup.find_all("div", class_="CHC5F")
그러나 아래 사진과 같이 매장 정보 전체(li)를 찾아 foods에 할당하게 된다면,
추후 추가적으로 수집하고자 하는 데이터가 있을 때, 더 넓은 범위에서 찾을 수 있습니다.
이렇게 되면 아래 리뷰 샘플 데이터도 수집할 수 있게 됩니다.
최대 페이지 파라미터 추가
현재 코드에서는 마지막 페이지를 확인하여 해당 페이지까지 이동하는 것으로 확인됩니다.
최대 페이지(max_page) 파라미터를 추가하여 원하는 만큼 수집되도록 하는 기능도 추가되었으면 좋겠습니다.
검색 시도 조건 수정
위 코드에서,
searchbox
를 찾은 뒤keyword
를 입력하게 되는데, 이때 class가"button_search"
인 요소가 나타날 때까지 기다린 후 엔터를 입력하여 검색하게 됩니다.개발자도구로 html을 살펴보면, class가
"button_search"
인 요소는 검색어 입력 여부와 상관 없이 항상 존재합니다. 반면, 그 밑에 class가"btn_clear"
인 요소는 input에 검색어가 입력되었을 때 나타나게 되는 요소입니다. 요소를 기다리는 목적이 검색 요청(엔터)을 보낼 준비가 되었는지 확인하는 것이라면, input에 검색어가 있을 때만 나타나는 해당 요소를 기다리는 것이 더 적절할 것으로 보입니다.review 관련
review 위치 파악 관련 주석 추가
리뷰 위치를 파악하는 데 여러 케이스가 있어 위와 같이 분리한 것으로 보여집니다. 다만, 주석을 추가한다면 각각이 어떤 케이스인지 이해하기 수월할 것 같습니다.
review 컬럼명 변경
현재 review 컬럼명은 "리뷰"이나, 수집되는 데이터는 리뷰 개수로 보입니다. 컬럼명을 "리뷰 수"로 수정하고, 데이터에서 "리뷰" 문자열을 제거하는 것이 좋을 것 같습니다. 예: "리뷰 999+" → "999+"
추가로 별점도 "별점" 문자열을 제외한 순수 별점만 수집하는 것이 좋아 보입니다. 예: "별점4.71" → "4.71"
review 샘플 데이터 추가
추가적으로 수집할 수 있는 항목을 보자면, 매장 리뷰 샘플이 있을 것 같습니다. 확인 결과, 약 3개 정도의 샘플 리뷰를 노출시키는 것으로 보입니다. 해당 데이터들을 "리뷰1", "리뷰2", "리뷰3" 컬럼을 추가하여 수집하면 좋을 것 같습니다.
그렇다면
foods
를 찾는 코드를 수정해야겠죠. 현재는 아래와 같이 매장 정보 중 일부만을foods
에 할당하고 있습니다.그러나 아래 사진과 같이 매장 정보 전체(
li
)를 찾아foods
에 할당하게 된다면, 추후 추가적으로 수집하고자 하는 데이터가 있을 때, 더 넓은 범위에서 찾을 수 있습니다. 이렇게 되면 아래 리뷰 샘플 데이터도 수집할 수 있게 됩니다.최대 페이지 파라미터 추가
현재 코드에서는 마지막 페이지를 확인하여 해당 페이지까지 이동하는 것으로 확인됩니다. 최대 페이지(
max_page
) 파라미터를 추가하여 원하는 만큼 수집되도록 하는 기능도 추가되었으면 좋겠습니다.