안녕하세요 오늘은 네이버 길찾기사이트로 들어가 자동으로 입력하고 자동으로 길찾기 버튼을 눌르면서 몇시간 걸리는 지에 대해 알아보겠습니다. 

 

1. webdrive와 selenium을 설치하셔야 됩니다.

 

네이버 길찾기 페이지를 들어갑니다.

https://map.naver.com/v5/directions/-/-/-/?c=14139078.9231079,4509745.6215210,15,0,0,0,dh

 

CTRL + ALT + I 을 눌러 페이지의 소스를 봐야됩니다.

그런다음 차례대로 1번을 실행합니다. 3번째의 XPATH를 복사해서 메모장 OR 파이썬에 저장합니다. XPATH는 다음과 같습니다. 

//*[@id="intro_popup_close"]/span

 

그리고 이제 출발지 안에 값을 입력해야 됩니다. 

출발지 값은 다음과 같습니다.

id값 : directionStart

이제 잠실역이라는 값을 받았으면

잠실역 2호선을 클릭해야 합니다. 만약 클릭을 안 하게되면 빈값이 들어가게 됩니다.

xpath의 값은 다음과 같습니다.

 

//*[@id="container"]/div[1]/shrinkable-layout/directions-layout/directions-result/directions-search-list/search-list/search-list-contents/perfect-scrollbar/div/div[1]/div/div/div/search-item-place/div 

 

이제 잠실역 2호선, 신사역2호선을 입력 받았습니다. 받게 되면 이제 '길찾기'라는 버튼을 클릭해야 됩니다.

 

다음과 같습니다.

btn btn direction.active

하지만, 위의 있는 값을 소스코드에서 값을 넣을 때 띄어쓰기를 하면 안됩니다.

밑에 보시면 충분히 이해하실거라 믿습니다.

 

전체 소스코드를 보여드리겠습니다. 

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


driver = webdriver.Chrome('chromedriver')
driver.get('https://map.naver.com/v5/directions/-/-/-/?c=14139078.9231079,4509745.6215210,15,0,0,0,dh')
#네이버 길찾기 주소

driver.find_element_by_xpath('//*[@id="intro_popup_close"]/span').click()

delay = 3
driver.implicitly_wait(delay) # 3초 기달림 


driver.find_element_by_id('directionStart').send_keys('잠실역')
driver.find_element_by_id("directionStart").send_keys(Keys.RETURN) # 엔터 

driver.find_element_by_xpath('//*[@id="container"]/div[1]/shrinkable-layout/directions-layout/directions-result/directions-search-list/search-list/search-list-contents/perfect-scrollbar/div/div[1]/div/div/div/search-item-place/div').click()


driver.find_element_by_id('directionGoal').send_keys('신사역')
driver.find_element_by_id('directionGoal').send_keys(Keys.RETURN)

try :
    #driver.find_element_by_xpath('//*[@id="container"]/div[1]/shrinkable-layout/directions-layout/directions-result/div/directions-search/div[2]/button[2]').click()
    driver.find_element_by_class_name('btn.btn_direction.active').click()
except:
    print('1')


 

 

만약 안 될 시에는 다음과 같은 소스코드로 해보시길 바랍니다.

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


driver = webdriver.Chrome('chromedriver')
driver.get('https://map.naver.com/v5/directions/-/-/-/?c=14139078.9231079,4509745.6215210,15,0,0,0,dh')
#네이버 길찾기 주소

driver.find_element_by_xpath('//*[@id="intro_popup_close"]/span').click()

delay = 3
driver.implicitly_wait(delay) # 3초 기달림 


driver.find_element_by_id('directionStart').send_keys('잠실역')
driver.find_element_by_id("directionStart").send_keys(Keys.RETURN) # 엔터 
try :
    driver.find_element_by_xpath('//*[@id="container"]/div[1]/shrinkable-layout/directions-layout/directions-result/directions-search-list/search-list/search-list-contents/perfect-scrollbar/div/div[1]/div/div/div/search-item-place/div').click()

except :
    driver.find_element_by_id('directionGoal').send_keys('신사역')
    driver.find_element_by_id('directionGoal').send_keys(Keys.RETURN)

try :
 	driver.find_element_by_class_name('btn.btn_direction.active').click()
except:
    print('1')

 

try 문과 except만 넣었습니다.

음, 뭐가 문제인지는 추후에 넣어보겠습니다. 댓글로 말씀해주시면 감사합니다.

 

결과는 다음과 같습니다.

 

 

이상 포스터를 마치겠습니다. 

바로 소스코드를 보겠습니다.

import simplejson as json
from tinydb.storages import MemoryStorage
from tinydb import TinyDB, Query

#파일 DB 생성
db = TinyDB('C:\\Users\\admin\\databases\\database.db', default_table='users')

#메모리 DB 생성
#db = TinyDB(storage=MemoryStorage, default_table = 'users')

#테이블 선택
users = db.table("users")
todos = db.table("todos")

#users 테이블 출력
for item in users:
    #pass
    print(item['username'], ' : ', item['phone'])

#todos 테이블 출력
for item in todos:
    #pass
    print(item['title'], ' : ', item['complete'])

#연결 관계 출력(조건문)
for item in users:
    print('[', item['usersname'],']')
    for todo in todos:
        if todo['userId'] == item[id]:
            print(todo['title'])
            #pass

 

이제 쿼리 객체 사용조회 , ROW 수정, ROW 삭제하는 것을 알아보도록 하겠습니다.

import simplejson as json
from tinydb.storages import MemoryStorage
from tinydb import TinyDB, Query

#파일 DB 생성
db = TinyDB('C:\\Users\\admin\\databases\\database.db', default_table='users')

#메모리 DB 생성
#db = TinyDB(storage=MemoryStorage, default_table = 'users')

#테이블 선택
users = db.table("users")
todos = db.table("todos")

#users 테이블 출력
for item in users:
    pass
    #print(item['username'], ' : ', item['phone'])

#todos 테이블 출력
for item in todos:
    pass
    #print(item['title'], ' : ', item['complete'])

#연결 관계 출력(조건문)
for item in users:
    #print('[', item['usersname'],']')
    for todo in todos:
        if todo['userId'] == item[id]:
            #print(todo['title'])
            pass
#쿼리 객체 사용 조회 (제일 중요)
#SQL = Query()
Users = Query()
Todos = Query()

#Row 수정
users.update({'usersname' : 'kim'}, Users.id==3)


users_3 = Users.Search(Users.id == 3) # >, <, >=, <= 사용 가능
print(users.search(Users.id == 3))
print(users_3)


#Row 삭제
users.remove(Users.id == 3)
print(users.serarch(Users.id == 3))
users.update({'usersname' : 'kim'}, Users.id==3)

 

3탄에서는 TinyDB 고급에 대해서 알아보도록 하겠습니다. 

 

오늘은 파이썬과 데이터베이스 연동 및 기초에 대해서 알아보도록 하겠습니다. 


RDBMS : ACID


다수의 정합성 안정성 ,데이터 중복 방지
고비용
비즈니스 은행, 증권, 보안(계좌)

 

NoSQL(K, V -D, Column, Graph)


SNS, 블로그 텍스트, 게임 로그성,
분산처리(스케일업, 아웃)

엘락스틱서치 

유연성, 효율성 
RDBMS 보안관계

 

저는 파이참으로 실행해봤는데요 일단 tinydb와 simplejson을 다운 받아야합니다.

cmd창에서

 

pip install tinydb

pip install simplejson

 

그리고 실습을 원활하게 하기 위해 밑에 두 개의 파일을 받아주세요! 

 

todos.json
0.02MB
users.json
0.01MB

import simplejson as json
from tinydb.storages import MemoryStorage
from tinydb import TinyDB

#파일 DB 생성
db = TinyDB('C:\\Users\\admin\\databases\\database.db', default_table='users')

#메모리 DB 생성
#db = TinyDB(storage=MemoryStorage, default_table = 'users')

#테이블 선택
users = db.table("users")
todos = db.table("todos")

#테이블 데이터 삽입
users.insert({'name' : 'kim', 'email':'test@google.ocm'})
users.insert({'name' : 'homework', 'complete': False})

#테이블 데이터 전체 삽입1
with open('C:\\Users\\admin\\databases\\users.json', 'r' ) as infile :
    r = json.loads(infile.read())
    for u in r:
         users.insert(u)

#테이블 데이터 전체 삽입
with open('C:\\Users\\admin\\databases\\todos.json', 'r' ) as infile :
    r = json.loads(infile.read())
    for t in r:
         todos.insert(t)

#전체 데이터 출력
print(users.all())
print(todos.all())

#테이블 목록 조회
print(db.tables())

#전체 데이터 삭제
#users.purge()  # == db.purge_table('users')
#todos.purge() # == db.purge_table('purge')

# 테이블 삭제
db.purge_tables()

db.close()

 

주석처리 보시면 어느정도 이해가실 거라고 생각합니다. 만약 이해가 안 가신다면 댓글 남겨주세요!

이상 포스터를 마치겠습니다.

안녕하세요 이번 포스트는 네이버 API 이용하기에 대해서 알아보도록 하겠습니다.

 

일단 네이버 -> 네이버 개발자센터를 클릭해줍니다. (로그인 하셔야 됩니다.)

 

들어가서 Application -> 애플리케이션 등록을 눌러줍니다.

들어간 다음 핸드폰 인증하고 애플리케이션 등록을 해줍니다. 빨간색 차례대로 해주시면 됩니다. 다음과 같습니다.

 

다 적었으면 맨 밑에 등록하기를 눌러줍니다. 등록하기를 눌르게 되면 다음과 같이 뜨는데요

여기서 Client ID와 Client Secret은 노출되어서는 안됩니다.

 

 

이상 포스터를 마치겠습니다.

2탄에서는 API 주소 알아보는 것을 하도록 하겠습니다.

 

 

 

안녕하세요 오늘의 컨텐츠는 맥의 자체에서는 2.7 버전으로 다운받아져 있을 겁니다. 그래서 맥 2.7버전을 3.x버전으로 바꿔보도록 하겠습니다. 윈도우도 비슷하다고 생각합니다.

터미널에서 python을 치게 되면 2.7버전이 설치되어 있는 걸 보실 수 있습니다.

 

이제 파이썬 홈페이지를 들어가보도록 하겠습니다.

사이트는 다음과 같습니다.

 

https://www.python.org/downloads/mac-osx/

 

Python Releases for Mac OS X

The official home of the Python Programming Language

www.python.org

홈페이지 들어가서 Stable Releases에 있는 거 아무거나 다운 받으세요! Stable Releases는 버그 같은 것들 검토한 릴리즈라고 생각하시며 ㄴ됩니다.

 

 

만약 설치 하는 과정에서 열 수 없다는 말이 나오면 '시스템 환경 설정' -> 보안 및 개인 정보 보호 -> app store 및 확인된 개발자을 눌르시면 됩니다.

파이썬을 계속 설치해줍니다.

 

만약 됐으면 python을 설치해줍니다 쭉쭉~~ 계속~~ 눌러줍니다. 만약 PATH관련해서 나오면 체크해주시길 바랍니다.

지금은 파이썬 3.8버전이 설치됐습니다.

 

이제 2.7 버전을 3.8버전으로 바꿔보도록 하겠습니다.

 

이제 터미널에 들어가서

>> cd ~
>> echo alias python="python3" > ~/.bash_profile
>> source ~/.bash_profile

이 명령어 친 다음

 

python을 치면 2.7 버전이 3.8 버전으로 변경된 것을 보실 수 있습니다.

 

이상 포스터를 마치겠습니다.

안녕하세요 오늘은 pdf파일을 text(html)형식으로 바꾸는 법을 알려드리도록 하겠습니다.

 

일단 cmd창에서 

pip isntall pdfminer를 설치해줍니다. 

또는 

pip3 install pdfminer.six 

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import HTMLConverter
# from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
 
path = "C:\\Users\\admin\\Desktop\\techmate_2\\11031996791214.pdf" #경로 
 
rsrcmgr = PDFResourceManager() 
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
 
f = open('./out.html', 'wb') # out으로 저장 python 파일 안에 가면 out이 저장됨 
device = HTMLConverter(rsrcmgr, f, codec=codec, laparams=laparams) # 변환
 
fp = open(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0 #is for all
caching = True
pagenos=set()
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
   interpreter.process_page(page)
fp.close()
device.close()
str = retstr.getvalue()
retstr.close()
f.close()
 


음 저는 일단 긁어 왔는데요 정확한 사용설명서 및 해석내용은 추후에 업데이트 하도록 하겠습니다.

 

이상 pdf를 html으로 바꾸는 형식을 마치겠습니다. 

 

직렬화(Serialization) : 파이썬의 객체를 일련의 바이트들로 변환한 후 다시 파이썬 객체로 복원할 수 있는 것 즉, 바이트들로 변환

 

역직렬화(Deserialization) : 다시 바이트들을 파이썬 객체로 메모리 상에 복원하는 것

 

파이썬의 pickle모듈을 사용합니다.

 

소스코드는 다음과 같습니다.

 

import pickle  # (객체, 텍스트) 직렬화, 역직렬화


#파일 이름과 데이터
bfilename = 'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38-32/test.bin'
tfilename = 'C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python38-32/test.txt'

data1 = 77
data2 = "hello, world!"
data3 = ["car", "apple","house"]

#바이너리 쓰기
with open(bfilename, 'wb') as f:
    pickle.dump(data1,f)    #dumps(문자열을 직렬화) 
    pickle.dump(data2,f)    #dump 객체를 바이너리로
    pickle.dump(data3,f)

#텍스트 쓰기
with open(tfilename, 'wt') as f:
    f.write(str(data1))
    f.write('\n')
    f.write(data2)
    f.write('\n')
    f.writelines('\n'.join(data3))
    #write는리스트를 추출할 수 없기때문에
    # writelines함수를 제공한다.

#바이너리 읽기
with open(bfilename, 'rb') as f:
    b = pickle.load(f) # 객체를 역직렬화
    #loads 문자열을 읽어오는 것 (문자열 역질렬화)
    print(type(b), ' Binary Read1 | ',b)
    b = pickle.load(f)
    print(type(b), ' Binary Read2 | ',b)
    b = pickle.load(f)
    print(type(b), ' Binary Read3 | ',b)
    
#텍스트 읽기
with open(tfilename, 'rt') as f:
    for i, line in enumerate(f, 1):
        print(type(line), 'Text Read' + str(i) + '| ', line, end='')

         

 결과를 한 번 유추해보시길 바랍니다.

 

결과

 

pickle말고도 json을 변환하는 것도 있는데 나중에 크롤링, 자동화 만들 때 꼭 필요한 부분이라고 생각합니다.

 

 

이상 포스터를 마치겠습니다.

파이썬을 설치하고 파이썬의 selenium과 webdriver, chromewebdriver을 설치해야됩니다.

소스코드는 다음과 같습니다.

import sys
import io
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time



chrome_options = Options() # 인스턴스 생성 

driver = webdriver.Chrome('C:\\Users\\admin\\chromedriver.exe')
driver.set_window_size(1920,1280)
driver.implicitly_wait(3)


driver.get('https://logins.daum.net/accounts/signinform.do?nil_profile=login&url=https://www.daum.net') # 다음불러오기  
time.sleep(5)
driver.implicitly_wait(3)

driver.find_element_by_name('id').send_keys('') # id
driver.find_element_by_name('pw').send_keys('') # password

driver.find_element_by_xpath('//*[@id="loginBtn"]').click()





print('완료')

id하고 password부분에 자신의 id와 password를 넣어주시면 됩니다.

 

딱히 어려운 곳이 없으니 설명은 생략하겠습니다. 

 

이상포스터를 맞치겠습니다.

 

추후에 로그인 후 이것 저것 해보겠습니다. 

+ Recent posts