search_area = driver.find_element_by_xpath('//*[@id="search.keyword.query"]') # 검색 창
search_area.send_keys(place) # 검색어 입력
driver.find_element_by_xpath('//*[@id="search.keyword.submit"]').send_keys(Keys.ENTER) # Enter로 검색
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
cafe_lists = soup.select('.placelist > .PlaceItem')
for i, cafe in enumerate(cafe_lists):
place_name = cafe.select('.head_item > .tit_name > .link_name')[0].text # name
detail_page_xpath = '//*[@id="info.search.place.list"]/li[' + str(i + 1) + ']/div[5]/div[4]/a[1]'
driver.find_element_by_xpath(detail_page_xpath).send_keys(Keys.ENTER)
driver.switch_to.window(driver.window_handles[-1]) # 상세정보 탭으로 변환
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
# 첫 페이지 리뷰 목록 찾기
review_lists = soup.select('.list_evaluation > li')
# 리뷰 뽑아내기
if len(review_lists) != 0:
for j, review in enumerate(review_lists):
comment = review.select('.txt_comment > span')
driver.close()
driver.switch_to.window(driver.window_handles[0]) # 검색 탭으로 전환
이전 글과 같은 방법으로 원하는 element의 xpath를 뽑아냅니다
그리고 목록은 beautifulsoup로 뽑습니다
그리고 목록들의 이름도 HTML을 분석해서 뽑아냅니다!
그리고 상세정보 버튼의 element의 xpath를 또 뽑아서 ENTER 키를 넣습니다
글고 이제!! 상세정보 탭으로 전환하는 방법입니다
selenium 탭 전환
driver.switch_to.window(driver.window_handles[-1]) # 상세정보 탭으로 변환
switch_to_window 함수를 이용하여 tab을 전환할 수 있습니다
이 함수에는 window name을 인자로 넣어야 합니다.
이 인자는 driver.window_handles라는 변수가 들고 있습니다.
가장 왼쪽 탭은 window_handles[0], 두 번째 탭은 window_handles[1], 그 다음은 window_handles[2]... 이렇게 됩니다
저는 가장 맨 오른쪽의 탭으로 전환하기 위해서 driver.window_handles[-1]을 인자로 넣었습니다
selenium 탭 닫기
driver.close() # 현재 탭 닫기
driver.switch_to.window(driver.window_handles[0]) # 검색 탭으로 전환
상세정보 탭으로 이동한 후에 정보를 다 빼냈다면
다시 다른 장소들을 검색하기 위해서 이전 탭으로 전환하려 합니다
그러기 위해서 탭을 닫고 다시 이전 탭으로 전환할 필요가 있습니다
다시 switch_to를 이용해서 탭을 전환합니다.
이렇게 하면 탭 전환했다가 탭 닫았다가 다시 탭으로 돌아면서 동적으로 크롤링할 수 있습니다