-
Notifications
You must be signed in to change notification settings - Fork 0
Description
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
직접 새로운 장소를 등록해 보세요.
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
지도 구현중에 조건문에서 오류, 해결 못함