카카오 맵 데이터를 크롤링하기 위해서는 selenium을 이용해서
동적으로 크롤링해야 합니다
기본적인 사항은 이전 selenium 크롤링 글을 참고하시면 됩니다!
https://hoho325.tistory.com/265
크롤링하기 위한 순서는 다음과 같습니다
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