Skip to content

23.11.28 지도 구현하기 (조건문 오류) #20

@bong9C

Description

@bong9C

import requests
import util.item_analysis as ui
from urllib.parse import quote
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from bs4 import BeautifulSoup
import folium
import pandas as pd

center = ['심리 상담 센터']
addr = '서울시 영등포구'

고객이 입력한 상품을 파는 매장을 리스트로 가져오기

center_list = center

고객이 입력한 주소 ['시', '구'] 또는 ['군', '면', '리'] 가져오기

addr_list = addr.split(' ')
addr_list1 = []
addr_list2 = []
for i in addr_list:
if i[-1] == '시':
addr_list1.append(i)
elif i[-1] == '구':
addr_list1.append(i)
elif i[-1] == '군':
addr_list2.append(i)
elif i[-1] == '면':
addr_list2.append(i)
elif i[-1] == '리':
addr_list2.append(i)

addr1 = ' '.join(addr_list1)
addr2 = ' '.join(addr_list2)

if addr1 != '':
addr = addr1
else:
addr = addr2
addr
'서울시 영등포구'
addr_list2
[]

네이버 플레이스 셀레니움으로 들어가기

n_place_url = f'https://m.place.naver.com/place/list?x={lng}&y={lat}&query={center} {addr}'
driver = webdriver.Chrome()
driver.get(n_place_url)

'목록보기' 클릭

filter = driver.find_element(By.XPATH, '//*[@id="_place_portal_root"]/div/a')
filter.click()
time.sleep(3)

'거리순' 클릭

short_way = driver.find_element(By.XPATH, '//*[@id="_list_scroll_container"]/div/div/div[1]/div/div/div/span[2]/a')
short_way.click()
time.sleep(3)

'상세 주소 화살표' 클릭

try:
juso_way = driver.find_elements(By.CLASS_NAME, 'uFxr1')
juso_way[0].click()
time.sleep(1)
except:
print('근처에 심리상담센터가 없습니다')

센터 정보 불러오기

soup = BeautifulSoup(driver.page_source, 'html.parser')
center_list = soup.find('ul', class_='eDFz9')
if center_list:
mart = center_list.find('li', recursive=False)
href_value
'tel:02-2069-0906'
mart

  • 베스트윤심리상담센터심리상담
    영업 종료10:00에 영업 시작
    현재 위치에서0m서울 구로구 구로동상세주소 닫기
    도로명서울특별시 구로구 구로동로35길 21 1층복사
    지번서울특별시 구로구 구로동 414-22 1층복사
    우편번호08286복사
    팝업 닫기
  • mart.select_one('span.JsCty > a') 전화 href_value = mart.select_one('span.JsCty > a').get('href') if href_value and href_value.startswith('tel:'): phone_number = href_value[4:] print(phone_number) 0507-1424-4561 center_list.select('li')[20]
  • 찾고 있는 장소가 없으신가요?
    직접 새로운 장소를 등록해 보세요.
  • mart.select_one('div.AbTyi').get_text().split('복사')[1][2:] '서울특별시 구로구 구로동 414-22 1층' results = []

    for i in range(len(center_list.select('li'))):
    if center_list:
    center = center_list.select('li')[i]

        if center:
            # 현재 위치에서 센터 
            if center.select_one('span.lWwyx.NVngW'):
                m_distance = center.select_one('span.lWwyx.NVngW').get_text().split('서')[1]
            else:
                m_distance = "N/A"
    
            # 센터 이름
            m_title_element = center.select_one('span.YwYLL')
            m_title = m_title_element.get_text() if m_title_element else "센터 이름 없음"
    
            # 센터 도로명 주소
            addr_element = center.select_one('div.AbTyi > div')
            if addr_element:
                addr_text = addr_element.get_text(strip=True)
                # 주소 형식에 따라 처리
                if '지번' in addr_text:
                    m_addr = addr_text.replace('지번', '').strip()
                elif '도로명' in addr_text:
                    m_addr = addr_text.replace('도로명', '').strip()
                else:
                    m_addr = addr_text
            else:
                m_addr = '주소없음'
    
                # 추가된 부분
                if '지번' not in m_addr:
                    # mart.select_one('div.AbTyi').get_text().split('복사')[1][2:]이 존재하면 사용
                    m_addr_copy = mart.select('div.AbTyi').get_text().split('복사')[1][2:]
                    m_addr = m_addr_copy if m_addr_copy else m_addr
    
            # 현재 위치에서 센터 전화번호
            if center.select_one('span.JsCty > a'):
                href_value = center.select_one('span.JsCty > a').get('href')
                if href_value and href_value.startswith('tel:'):
                    m_tel = href_value[4:]
                else:
                    m_distance = "N/A"
    
            # 딕셔너리 형태로 저장
            center_data = {
                '거리': m_distance,
                '매장명': m_title,
                '주소': m_addr,
                '전화번호': m_tel
            }
    
            # 중복 체크
            duplicate = False
            for existing_result in results:
                if existing_result['매장명'] == m_title and existing_result['주소'] == m_addr:
                    duplicate = True
                    break
    
            # 중복이 없을 경우에만 저장
            if not duplicate:
                results.append(center_data)
    
        else:
            print('센터 정보를 찾을 수 없습니다.')
    

    driver.quit()

    AttributeError Traceback (most recent call last)
    e:\Bigproject_H\map\get_market_info.ipynb 셀 16 line 3
    32 # 추가된 부분
    33 if '지번' not in m_addr:
    34 # mart.select_one('div.AbTyi').get_text().split('복사')[1][2:]이 존재하면 사용
    ---> 35 m_addr_copy = mart.select('div.AbTyi').get_text().split('복사')[1][2:]
    36 m_addr = m_addr_copy if m_addr_copy else m_addr
    38 # 현재 위치에서 센터 전화번호

    File c:\Users\human\anaconda3\Lib\site-packages\bs4\element.py:2428, in ResultSet.getattr(self, key)
    2426 def getattr(self, key):
    2427 """Raise a helpful exception to explain a common code fix."""
    -> 2428 raise AttributeError(
    2429 "ResultSet object has no attribute '%s'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?" % key
    2430 )

    AttributeError: ResultSet object has no attribute 'get_text'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
    addr = results[0]['주소']
    results
    [{'거리': '0m',
    '매장명': '베스트윤심리상담센터',
    '주소': '서울특별시 구로구 구로동로35길 21 1층복사',
    '전화번호': '0507-1424-4561'},
    {'거리': '730m', '매장명': '코끼리아동청소년발달센터', '주소': '주소없음', '전화번호': '02-2637-1032'},
    {'거리': '750m', '매장명': '국제심리인지클리닉', '주소': '주소없음', '전화번호': '0507-1318-6622'},
    {'거리': '970m', '매장명': '마미심리상담센터', '주소': '주소없음', '전화번호': '0507-1450-2348'},
    {'거리': '970m', '매장명': '늘푸른심리상담센터', '주소': '주소없음', '전화번호': '0507-1328-3223'},
    {'거리': '1.2km', '매장명': '위윌심리상담센터', '주소': '주소없음', '전화번호': '0507-1386-8603'},
    {'거리': '1.2km',
    '매장명': '허그맘허그인 심리상담센터 신도림직영센터',
    '주소': '주소없음',
    '전화번호': '02-6956-7915'},
    {'거리': '1.3km', '매장명': '번지심리상담센터', '주소': '주소없음', '전화번호': '0507-1316-6917'},
    {'거리': '1.5km', '매장명': '국제아동발달클리닉', '주소': '주소없음', '전화번호': '02-2632-9657'},
    {'거리': '1.5km', '매장명': '마음둥지심리상담센터', '주소': '주소없음', '전화번호': '0507-1436-3119'},
    {'거리': '1.5km', '매장명': '조이심리상담센터', '주소': '주소없음', '전화번호': '010-7632-5997'},
    {'거리': '1.5km',
    '매장명': '첨단인지브레인 신도림점',
    '주소': '주소없음',
    '전화번호': '0507-1311-4550'},
    {'거리': '1.6km', '매장명': '포근한마음심리상담센터', '주소': '주소없음', '전화번호': '0507-1412-0558'},
    {'거리': '1.6km', '매장명': '아문심리상담센터', '주소': '주소없음', '전화번호': '0507-1371-6739'},
    {'거리': '1.7km',
    '매장명': '원광디지털대학교 심리상담센터',
    '주소': '주소없음',
    '전화번호': '070-7730-5985'},
    {'거리': '1.7km', '매장명': '도운심리상담센터', '주소': '주소없음', '전화번호': '010-9959-6694'},
    {'거리': '1.7km', '매장명': '심리상담센터오늘은', '주소': '주소없음', '전화번호': '010-9537-3354'},
    {'거리': '1.8km', '매장명': '봄날의 햇살 심리상담센터', '주소': '주소없음', '전화번호': '02-2135-5536'},
    {'거리': '1.8km', '매장명': 'LEV심리상담센터', '주소': '주소없음', '전화번호': '02-3667-8008'},
    {'거리': '1.8km', '매장명': '움트심리상담센터', '주소': '주소없음', '전화번호': '0507-1488-2780'},
    {'거리': 'N/A', '매장명': '센터 이름 없음', '주소': '주소없음', '전화번호': '0507-1488-2780'},
    {'거리': '1.8km', '매장명': '시옷심리상담센터', '주소': '주소없음', '전화번호': '0507-1321-2779'},
    {'거리': '1.8km', '매장명': '통합심리상담센터', '주소': '주소없음', '전화번호': '0507-1313-2812'},
    {'거리': '1.9km', '매장명': '심리상담센터깸', '주소': '주소없음', '전화번호': '02-3439-7279'},
    {'거리': '1.9km', '매장명': '치유심리상담센터', '주소': '주소없음', '전화번호': '02-855-9926'},
    {'거리': '1.9km', '매장명': '위드심리상담센터', '주소': '주소없음', '전화번호': '02-2671-0911'},
    {'거리': '2.0km',
    '매장명': '금천누리 아동발달지원센터',
    '주소': '주소없음',
    '전화번호': '070-4365-8100'},
    {'거리': '2.0km',
    '매장명': '마음치유클리닉 심리상담센터',
    '주소': '주소없음',
    '전화번호': '02-2678-7119'},
    {'거리': '2.0km',
    '매장명': '로뎀나무 진로설계 & 심리상담센터',
    '주소': '주소없음',
    '전화번호': '0507-1459-5701'},
    {'거리': '2.2km', '매장명': '굿 상담클리닉', '주소': '주소없음', '전화번호': '02-478-1366'},
    {'거리': '2.3km', '매장명': '마인드줌심리상담센터', '주소': '주소없음', '전화번호': '0507-1342-9349'},
    {'거리': '2.4km', '매장명': '하나아동발달센터', '주소': '주소없음', '전화번호': '0507-1377-1549'},
    {'거리': '2.6km', '매장명': '영등포구청소년상담복지센터', '주소': '주소없음', '전화번호': '02-2676-6114'},
    {'거리': '2.6km',
    '매장명': '마음의 정원 최면심리상담센터',
    '주소': '주소없음',
    '전화번호': '010-2420-5977'},
    {'거리': '2.7km', '매장명': '금천Wee센터', '주소': '주소없음', '전화번호': '02-864-8416'},
    {'거리': '2.8km', '매장명': '보보애 심리상담센터', '주소': '주소없음', '전화번호': '0507-1320-6649'},
    {'거리': '2.8km', '매장명': '아르케정신건강의학과의원', '주소': '주소없음', '전화번호': '02-6953-7505'},
    {'거리': '2.9km',
    '매장명': '유해피 아동청소년성인 심리상담센터 목동점',
    '주소': '주소없음',
    '전화번호': '02-2642-3533'},
    {'거리': 'N/A', '매장명': '청소년상담실 영등포지구', '주소': '주소없음', '전화번호': '02-2642-3533'},
    {'거리': '3.1km', '매장명': '펀아테심리상담센터', '주소': '주소없음', '전화번호': '02-812-9630'},
    {'거리': '3.1km', '매장명': '남부Wee센터', '주소': '주소없음', '전화번호': '02-2677-7887'},
    {'거리': '3.1km', '매장명': '열린언어심리상담센터', '주소': '주소없음', '전화번호': '010-2468-7816'},
    {'거리': '3.3km',
    '매장명': '한신플러스케어 상담센터',
    '주소': '주소없음',
    '전화번호': '0507-1317-3782'},
    {'거리': '3.3km', '매장명': '인애', '주소': '주소없음', '전화번호': '02-2675-4125'},
    {'거리': '3.4km', '매장명': '새길 아동청소년 상담센터', '주소': '주소없음', '전화번호': '02-2642-6848'},
    {'거리': '3.4km', '매장명': '수아람심리상담센터', '주소': '주소없음', '전화번호': '0507-1370-4207'},
    {'거리': '3.4km', '매장명': '동작구청소년상담복지센터', '주소': '주소없음', '전화번호': '02-834-1355'},
    {'거리': '3.5km',
    '매장명': '허그맘허그인 심리상담센터 목동직영점',
    '주소': '주소없음',
    '전화번호': '02-6092-6600'},
    {'거리': 'N/A', '매장명': '당신의 마음거울', '주소': '주소없음', '전화번호': '02-6092-6600'},
    {'거리': '3.6km', '매장명': '심리상담센터보듬과아우름', '주소': '주소없음', '전화번호': '02-2642-3375'},
    {'거리': '3.6km', '매장명': '서울아동상담센터', '주소': '주소없음', '전화번호': '02-846-7942'},
    {'거리': 'N/A', '매장명': '새봄상담센타', '주소': '주소없음', '전화번호': '02-846-7942'},
    {'거리': '3.6km', '매장명': '미래상담센타', '주소': '주소없음', '전화번호': '02-2647-7597'},
    {'거리': '3.6km', '매장명': '푸른상담센타', '주소': '주소없음', '전화번호': '02-2647-7572'},
    {'거리': '3.6km', '매장명': '관악밝음이랑Wee센터', '주소': '주소없음', '전화번호': '02-853-2460'},
    {'거리': '3.6km', '매장명': '같이심리상담센터', '주소': '주소없음', '전화번호': '02-2679-1911'},
    {'거리': 'N/A', '매장명': '성모심리상담센터', '주소': '주소없음', '전화번호': '02-2679-1911'},
    {'거리': '3.7km', '매장명': '다빈치심리상담센터', '주소': '주소없음', '전화번호': '02-2676-9222'},
    {'거리': '3.7km',
    '매장명': '코끼리아동청소년발달센터 동작연구소',
    '주소': '주소없음',
    '전화번호': '0507-1330-0275'},
    {'거리': '3.7km',
    '매장명': '허그맘허그인심리상담센터 보라매센터',
    '주소': '주소없음',
    '전화번호': '02-2138-2911'},
    {'거리': '3.8km', '매장명': '남영심리상담센터', '주소': '주소없음', '전화번호': '0507-1317-4606'},
    {'거리': '3.8km',
    '매장명': '대교 드림멘토 상담센터 보라매점',
    '주소': '주소없음',
    '전화번호': '0507-1468-0520'},
    {'거리': '3.8km', '매장명': '닥터앤맘', '주소': '주소없음', '전화번호': '0507-1346-6835'},
    {'거리': '3.9km',
    '매장명': '헬로스마일심리상담센터 목동점',
    '주소': '주소없음',
    '전화번호': '02-2647-5412'},
    {'거리': '3.9km', '매장명': 'SRC언어심리상담센터', '주소': '주소없음', '전화번호': '02-871-8201'},
    {'거리': '3.9km', '매장명': '한겨레심리상담센터', '주소': '주소없음', '전화번호': '02-2642-1233'},
    {'거리': '3.9km', '매장명': '자기다운 심리상담센터', '주소': '주소없음', '전화번호': '02-2168-4050'},
    {'거리': '3.9km',
    '매장명': '김세하 아동청소년 상담센터',
    '주소': '주소없음',
    '전화번호': '0507-1345-6509'},
    {'거리': '3.9km', '매장명': '마음선생님심리연구소', '주소': '주소없음', '전화번호': '0507-1374-2726'},
    {'거리': '3.9km', '매장명': '지수심리상담센터', '주소': '주소없음', '전화번호': '0507-1445-0104'},
    {'거리': '3.9km', '매장명': '극동상담심리연구학회', '주소': '주소없음', '전화번호': '02-2168-2891'},
    {'거리': '3.9km', '매장명': '진솔심리상담센터', '주소': '주소없음', '전화번호': '0507-1368-5870'},
    {'거리': '3.9km',
    '매장명': '그루터기심리상담센터 목동점',
    '주소': '주소없음',
    '전화번호': '0507-1498-3408'},
    {'거리': '3.9km', '매장명': '성공독서코칭센터', '주소': '주소없음', '전화번호': '02-2655-0808'},
    {'거리': '4.0km',
    '매장명': '아하서울시립청소년성문화센터',
    '주소': '주소없음',
    '전화번호': '02-2677-9220'},
    {'거리': '4.1km', '매장명': '온맘심리상담센터', '주소': '주소없음', '전화번호': '0507-1358-2803'},
    {'거리': '4.2km', '매장명': '늘여기 심리상담센터', '주소': '주소없음', '전화번호': '0507-1312-9736'},
    {'거리': '4.4km', '매장명': '따움상담센터', '주소': '주소없음', '전화번호': '02-825-5575'},
    {'거리': '4.4km', '매장명': '서울예술심리상담센터', '주소': '주소없음', '전화번호': '010-4566-7933'},
    {'거리': '4.4km', '매장명': '좋은향기 왕성심리상담센터', '주소': '주소없음', '전화번호': '02-871-8733'},
    {'거리': '4.5km', '매장명': '서울아이 발달지원센터', '주소': '주소없음', '전화번호': '02-3280-6311'},
    {'거리': 'N/A', '매장명': '풀빛옹이 심리상담센터', '주소': '주소없음', '전화번호': '02-3280-6311'},
    {'거리': '4.6km', '매장명': '힐마인드언어심리상담센터', '주소': '주소없음', '전화번호': '02-2655-1048'},
    {'거리': '4.6km', '매장명': '세계로최면심리상담센터', '주소': '주소없음', '전화번호': '02-1688-1755'},
    {'거리': '4.6km', '매장명': '분석심리학연구소', '주소': '주소없음', '전화번호': '02-2634-7599'},
    {'거리': '4.7km', '매장명': '자기의 이유 심리상담소', '주소': '주소없음', '전화번호': '070-8065-7355'},
    {'거리': '4.7km', '매장명': '선 심리상담센터', '주소': '주소없음', '전화번호': '02-2652-7991'},
    {'거리': '4.7km', '매장명': '한꿈상담심리센터', '주소': '주소없음', '전화번호': '010-2563-4838'},
    {'거리': '4.8km', '매장명': '목동심리상담센터', '주소': '주소없음', '전화번호': '02-785-0535'},
    {'거리': '4.8km', '매장명': '다움심리상담센터', '주소': '주소없음', '전화번호': '0507-1422-1377'},
    {'거리': '4.8km', '매장명': '연세오푸스심리상담센터', '주소': '주소없음', '전화번호': '02-2678-8880'},
    {'거리': '4.8km',
    '매장명': '마인드업 심리상담연구소',
    '주소': '주소없음',
    '전화번호': '0507-1311-5412'},
    {'거리': '4.9km', '매장명': '최정금심리학습클리닉', '주소': '주소없음', '전화번호': '02-2631-9007'},
    {'거리': '4.9km',
    '매장명': '마음iN심리상담센터 여의도점',
    '주소': '주소없음',
    '전화번호': '0507-1493-3030'},
    {'거리': '4.9km', '매장명': '코리안민트심리상담센터', '주소': '주소없음', '전화번호': '0507-1497-1096'},
    {'거리': '4.9km', '매장명': '이주은 부부상담 본점', '주소': '주소없음', '전화번호': '010-9070-0153'},
    {'거리': '5.0km', '매장명': '마음 in 심리상담센터', '주소': '주소없음', '전화번호': '010-9469-0911'},
    {'거리': '5.1km', '매장명': '조이에듀', '주소': '주소없음', '전화번호': '0507-1354-1151'},
    {'거리': '5.1km',
    '매장명': '허그맘허그인심리상담센터 여의도센터',
    '주소': '주소없음',
    '전화번호': '02-2135-7542'},
    {'거리': '5.2km', '매장명': '여의도심리상담센터', '주소': '주소없음', '전화번호': '02-6274-0030'},
    {'거리': '5.2km', '매장명': '에벤에셀 상담센터', '주소': '주소없음', '전화번호': '02-2069-0906'}]

    center_data
    {'거리': '5.2km', '매장명': '에벤에셀 상담센터', '주소': '주소없음', '전화번호': '02-2069-0906'}
    addr = center_data['주소']

    고객이 입력한 주소 좌표 구하기

    try:
    with open('keys/카카오api.txt') as file:
    kakao_key = file.read()

    base_url = 'https://dapi.kakao.com/v2/local/search/address.json'
    header = {'Authorization': f'KakaoAK {kakao_key}'}
    url = f'{base_url}?query={quote(addr)}'
    result = requests.get(url, headers=header).json()
    lat = float(result['documents'][0]['y'])
    lng = float(result['documents'][0]['x'])
    

    except:
    print('주소 형식이 올바르지 않습니다.')
    주소 형식이 올바르지 않습니다.
    lat, lng
    (37.4933162294779, 126.882746486339)

    가장 가까운 상담센터 위도 경도

    try:
    with open('keys/카카오api.txt') as file:
    kakao_key = file.read()
    base_url = 'https://dapi.kakao.com/v2/local/search/address.json'
    header = {'Authorization': f'KakaoAK {kakao_key}'}
    url = f'{base_url}?query={quote(addr)}'
    result = requests.get(url, headers=header).json()
    lat = float(result['documents'][0]['y'])
    lng = float(result['documents'][0]['x'])
    except:
    print('주소 형식이 올바르지 않습니다.')
    주소 형식이 올바르지 않습니다.
    lat, lng
    (37.4933162294779, 126.882746486339)
    map = folium.Map(location=[lat, lng], zoom_start=8) # Center position
    folium.Marker(
    location=[lat, lng],
    tooltip=center_data['매장명'],
    popup=folium.Popup(center_data['주소']+'
    '+'전화번호 넣자',max_width=200)

    ).add_to(map)

    title_html = '

    심리상담센터

    '
    map.get_root().html.add_child(folium.Element(title_html))
    map
    Make this Notebook Trusted to load map: File -> Trust Notebook

    지도 구현중에 조건문에서 오류, 해결 못함

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      No labels
      No labels

      Projects

      No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions