새소식

크롤링

selenium 이용해서 카카오 맵 장소 리뷰 크롤링 하기

  • -

카카오 맵 데이터를 크롤링하기 위해서는 selenium을 이용해서

동적으로 크롤링해야 합니다

기본적인 사항은 이전 selenium 크롤링 글을 참고하시면 됩니다!

https://hoho325.tistory.com/265

 

파이썬 크롤링(crawling) :: selenium 이용하여 카카오맵 동적 크롤링 하기 - 1

크롤링을 하려다 보면 페이지 url로 하는게 아니라 동적으로 처리되는 경우가 있습니다 예를들어 다음 지도의 경우 주소는 다 그대로인데 아래의 내용들만 바뀝니다!! 예를들어 강남 스타벅스라

hoho325.tistory.com

 

크롤링하기 위한 순서는 다음과 같습니다

1. 검색 창을 찾아 검색어를 입력하고 검색버튼을 누른다

2. beautifulsoup로 parsing하여 검색된 장소 목록들을 가져온다

3. 장소들을 하나씩 탐색하며 상세보기 버튼을 찾아 누른다

4. 상세보기 탭으로 변경한다

5. 리뷰를 크롤링한다 (beautifulsoup로 parsing)

6. 리뷰가 여러개 있는 경우 find_element_by_xxx를 이용하여 다음 페이지로 넘어가며 페이지 끝까지 크롤링한다

 

전체적인 과정은 위와 같습니다. 나머지는 selenium(셀레니움)의 응용과 HTML 코드 분석에 지나지 않습니다

아마 여러번의 시행착오가 필요할 겁니다... 저도 그랬습니다 ㅠㅠ

한 페이지에서 된다 생각해도   

그렇기 때문에 간단히 리뷰를 추출하는 부분만 보도록 하겠습니다.

 

* 모든 데이터는 개인적인 공부나 프로젝트 용으로 이용하시길 바랍니다 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def extract_review(place_name):
    global driver
 
    ret = True
 
    html = driver.page_source
    soup = BeautifulSoup(html, 'html.parser')
 
    # 첫 페이지 리뷰 목록 찾기
    review_lists = soup.select('.list_evaluation > li')
 
    # 리뷰가 있는 경우
    if len(review_lists) != 0:
        for i, review in enumerate(review_lists):
            comment = review.select('.txt_comment > span'# 리뷰
            rating = review.select('.grade_star > em'# 별점
            val = ''
            if len(comment) != 0:
                if len(rating) != 0:
                    val = comment[0].text + '/' + rating[0].text.replace('점''')
                else:
                    val = comment[0].text + '/0'
                print(val)
 
    else:
        print('no review in extract')
        ret = False
 
    return ret
cs

현재 페이지에서 HTML 코드를 뽑아냅니다

그리고 beautifulsoup의 select를 이용해서 review list를 뽑아냅니다

HTML 코드를 보면 list_evaluation 밑의 li 태그들이 모두 리뷰들이에요

그런데 상세페이지로 들어왔느데 리뷰가 없는 경우도 있을 수 있으니까 리뷰가 있는 경우만 탐색합니다

리뷰는 txt_comment class밑의 span 태그안에 있고

별점은 grade_star class 밑의 em 태그 안에 있습니다

 

그리고 욕설 이런걸로 블라인드 처리 된 댓글들이 있어서 댓글이 써있는 경우에만 참조합니다

별점이 있는 경우에는 리뷰/별점 이런 형식으로 출력하고 그렇지 않으면 리뷰/0으로 출력합니다

그러면 리뷰 크롤링 끝!!!

개발자 도구에서 element selector를 잘 활용해서 HTML 분서만 잘 할줄아면 쉽습니다

 

리뷰가 잘 나오네요~~

전체 코드는 아래 깃허브에 올려 두었습니다

https://github.com/wlgh325/python_crawling

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.