221114 항해99 8일차 코딩

요니링 컴터 공부즁·2022년 11월 15일
0
  1. 조 바뀌고 바로 풀스택 프로젝트 시작했다.
  • 서울시 동물병원 정보 띄워주는 웹앱 개발
  • 내가 할 일:
    1) 까미 사진 보고 고양이 아이콘 만들기
    2) 와이어프레임 그리기




    3) 3번 병원 목록 페이지 만들기
  1. 동물병원 정보 구하기
  • 서울시 홈페이지에서 동물병원 인허가 정보 csv 파일을 다운받았다. (오픈API도 사용 가능한것 같았는데 아직 url 정해진게 없어서 그냥,,)
  • 네이버 지도에서 번호 크롤링
    => 여러 곳이 뜰 경우와 서울에 있는 곳이 여러 곳일 경우 코드 더 작성해보기
import requests
from bs4 import BeautifulSoup

# csv 파일에서 병원 이름 가져오기
import pandas as pd
from selenium.common import NoSuchFrameException

hospital_name = pd.read_excel('input.xlsx', sheet_name='Sheet1').values

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time

# csv 파일 만들기
import csv

file = open('hospital_num.csv', mode='w', newline='')
writer = csv.writer(file)
writer.writerow(["name", "number"])
final_result = []

time.sleep(1)

for i in range(len(hospital_name)):
    # 검색 엔진에 입력하기, 엔터 치기
    DRIVER_PATH = '/path/to/chromedriver'
    driver = webdriver.Chrome(executable_path=DRIVER_PATH)
    driver.get('https://map.naver.com/v5/')

    wait_search_box = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "input_search")))
    search_box = driver.find_element(By.CLASS_NAME, "input_search")
    search_box.send_keys(hospital_name[i], Keys.RETURN)

    time.sleep(10)

    try:# 첫번째 시도 / 바로 뜰 경우: 바로 번호 긁어오기
    # Iframe으로 전환하기
        driver.switch_to.default_content()
        driver.switch_to.frame('entryIframe')

        time.sleep(3)

        # 번호 찾아서 입력하기
        hospital_phone = driver.find_element(By.CSS_SELECTOR, "span.dry01").text

    except: # 아무 정보가 뜨지 않을 경우: 정보 없음으로 입력하기
        hospital_phone = '정보 없음'

    hospital_info = {
        'name': str(hospital_name[i]),
        'number': hospital_phone
    }
    print(hospital_info)

    final_result.append(hospital_info)

# 엑셀 파일에 이름과 전화번호 저장
for result in final_result:
    row = []
    row.append(result['name'])
    row.append(result['number'])
    writer.writerow(row)

print(final_result)
  1. python으로 데이터 조작하기
  • '02)', 빈칸, 지역 번호 없는 번호들 추려서 통일성 있게 데이터 수정해보려고 했는데 파이썬 문법을 몰라서 어렵다,, 그래서 그냥 엑셀로 했음
  1. DB에 데이터 업로드하기
  • 데이터프레임 등에 대해 잘 안다면 데이터 조작이 수월할 것 같다

import pandas as pd

df = pd.read_excel('hospital_info.xlsx', sheet_name='Sheet1')

df_rename = df.rename(columns={'전화번호': 'phoneNum', '도로명주소': 'address', '사업장명': 'hosName', '좌표정보(X)': 'xAxis', '좌표정보(Y)': 'yAxis' })

df2 = df_rename.fillna('정보 없음')

import numpy as np

#병원마다 번호 가질 수 있게 컬럼 추가
df2['row_num'] = np.arange(len(df2))

hospital_info = pd.DataFrame(df2)

from pymongo import MongoClient
client = MongoClient('Connect url')
hospitalInfo = client.hospitalDB.hospitalInfo

upload_info = hospital_info.to_dict("records")

hospitalInfo.insert_many(upload_info)

=> 파이썬 공부를 하자~~~

0개의 댓글