안녕하세요 이번에 엄청 간단한 실습을 해보겠습니다.

 스크린샷을 일일이 하기 힘들잖아요 

그래서 저는 구글 홈페이지 스크린샷, 다음 홈페이지 스크린샷 이렇게 두 개를 해보겠습니다.

 

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

 

파이썬으로 하기 위해서는 selenium와 chromewebdriver가 설치 되어 있어야 됩니다.

import sys
import io
from selenium import webdriver


driver = webdriver.Chrome(r'C:\\Users\\admin\\chromedriver.exe')
# 크롬드라이버 있는 곳 

driver.implicitly_wait(5)

driver.get('https://google.com') # 구글 불러오기 

driver.save_screenshot("C:\\Users\\admin/website1.png") #
# 구글  사진 찍기, 사진 찍을 곳 저장위치 

driver.implicitly_wait(5) #기다림 

driver.get("https://www.daum.net") #다음 불러오기 

driver.save_screenshot("C:\\Users\\admin/website2.png")
# 다음 사진 찍기, 사진 찍을 곳 저장위치 


driver.quit() # 종료 

print('스크린샷 완료')

 

이렇게 되면 자동으로 다음과구글이 알아서 켜지고 꺼집니다.

제가 폴더에 저장한 곳에 들어가보면

 

 

만약 내부적으로 실행시키고 싶다면 밑에 꺼를 사용해주세요

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



chrome_options = Options() # 인스턴스 생성
chrome_options.add_argument("--headless") # 내부적으로 실행 

driver = webdriver.Chrome(chrome_options=chrome_options,executable_path=r'C:\\Users\\admin\\chromedriver.exe')
# 크롬드라이버 있는 곳  excutable_pat = 즉시실행 
#12줄에서 오류가 뜬다면 r'C:\\을 r을 빼보고 실행시켜보세요~ 


#driver.implicitly_wait(5)

driver.get('https://google.com') # 구글 불러오기 

driver.save_screenshot("C:\\Users\\admin/website_ch0.png") #
# 구글  사진 찍기, 사진 찍을 곳 저장위치 

#driver.implicitly_wait(5) #기다림 

driver.get("https://www.daum.net") #다음 불러오기 

driver.save_screenshot("C:\\Users\\admin/website_ch.png")
# 다음 사진 찍기, 사진 찍을 곳 저장위치 


driver.quit() # 종료 

print('스크린샷 완료')

 

먼저 소스코드부터 보여드리겠습니다.

from bs4 import BeautifulSoup
import requests


#로그인 유저정보
LOGIN_INFO = {
    'user_id' : '', #루리웹의  자신의 아이디랑 비번을 넣어줘야합니다 일단. 
    'user_pw': ''
    }

#Session 생성, with 구문안에서 유지
with requests.Session() as s:
    login_req = s.post('https://user.ruliweb.com/member/login_proc', data=LOGIN_INFO)
    #송신확인 HTML 소스확인
    # print('login_req', login_req.text)
    #Header 확인
    # print('headers', login_req.headers)
    # ---- 송신 확인 과 헤더를 확인합니다. 
    
    if login_req.status_code == 200 and login_req.ok: 
    	# 만약 송신이 되었다면 밑에 프로그램을 실행
        # 보고 있는 게시판 URL 저장 
        post_one = s.get('https://bbs.ruliweb.com/market/board/320103/read/124780?')
        post_one.raise_for_status() # 에러가 발생한다면 예외처리
        soup = BeautifulSoup(post_one.text, 'html.parser') # 뷰티풀솝을 이용해 파싱
        #print(soup.prettify()) 
        article = soup.select_one(" div.board_main_view").find_all('p')# div.board의 p태그를 찾습니다. 
        #print(article) # <p> 출력하고요 
        
        for i in article :
            print(i.string)#  <p> 없이 출력
            
        
        

 

음 여기서 article = soup.select_one("div.board_main_view").find_all('p')을 찾는 법을 알려드리겠습니다.

 

결과는 다음과 같습니다.

 

 

만약

 for i in article :
                print(i.string)

을 좀 더 활용한다면

 

 for i in article :
            if i .string is not None:
                print(i.string) 

이렇게 되겠네요 

Rest(Representational State Transfer)

HTTP URL(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 자원에 대한 CRUD Operation을 적용한다.

, 분산 시스템의 아키텍처 스타일이다. 조건을 제시하면서 분산 시스템을 설계한다.

 

RESTful?

제약 조건의 집합을 모두 만족하는 것을 의미

 

REST는 아키텍처 스타일, RESTful APIREST아키텍처 원칙을 모두 만족하는 API

 

REST가 필요한 이유는?

1.분산 시스템을 위해서, 애플리케이션의 모듈 , 기능별로 분리하기 쉬워졌기 때문

 

2. WEB브라우저외의 클라이언트를 위해서(멀티 플랫폼)

웹의 데이터만 보내면 여러 클라이언트에서 해당 데이터를 적절히 보여주기 때문

 

 

Resource : 위치 명시

Method : 명시

 

참고자료

https://jeong-pro.tistory.com/180

소스밖에 없는데 소스를 직접 해석하는 것도 실력이락 생각합니다. 

import requests


# r = requests.get('https://api.github.com/events')
# r.raise_for_status() # 예외 발생해줌
# print(r.text)


jar = requests.cookies.RequestsCookieJar()
jar.set('name', 'kim', domain='httpbin.org', path='/cookies')

#r = requests.get('http://httpbin.org/cookies', cookies=jar)
#r.raise_for_status()

# print(r.text)


# r = requests.get('https://github.com', timeout= 5)
# print(r.text)

#r = requests.post('http://httpbin.org/post', data= {'name' : 'kim'}, cookies=jar)
# print(r.text)

payload1 = {'key1' : 'value1', 'key2' : 'value2'} #dict 
payload2= (('key1', 'value1'), ('key1','value2')) #tuple

r = requests.post('http://httpbin.org/post', data = payload2)
print(r.text)


 

 

결과값은 직접 해보셔서 저한테 알려주시길 바랍니다^^,, 

여기서 r.raise_for_status()는 r = requests.get('http://httpbin.org/cookies', cookies=jar)에서

에러가 발생했을 때 에러 상황을 알려줍니다.

만약 에러가 보고 싶다면 r = requests.get을 r = requedda.get으로 바꿔보시길 바랍니다. 

 

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

cmd창에서 윈도우키 + R

pip install stream-python

pip install pytube

 

를 해줍니다.

 

import pytube

yt = pytube.YouTube("https://www.youtube.com/watch?v=hWYM5QEt0Fg")
# 유튜브 사이트에  가호 - 시작을 초기하면에서 복사 
videos = yt.streams.all()


#print('videos',videos)


for i in range(len(videos)):
    print(i, ' , ', videos[i])
    
    

down_dir = "C:\\Users\\admin\\dist" # mp4를 저장할 곳 입력, 다른 폴더 만들어도 됨 

videos[0].download(down_dir)

ImportError: cannot import name 'quote' from 'pytube.compat

만약 이런 오류가 뜬다면

 

pip uninstall pytube
pip uninstall pytube3
pip insatll pytube

 

를 다시 해보시길 바랍니다. 

 

 

mp4가 설치되었습니다. 이제 mp4 -> mp3로 변환해주겠습니다. 

http://ffmpeg.org/download.html 운영체제에 맞게 설치를 해줍니다. 

 

Download FFmpeg

If you find FFmpeg useful, you are welcome to contribute by donating. More downloading options Git Repositories Since FFmpeg is developed with Git, multiple repositories from developers and groups of developers are available. Releases Approximately every 6

ffmpeg.org

 

 

이제 ffmpeg을 다운 받고 압축을 푼 다음에 ffmpeg파일을 dist 폴더 안에 넣어줍니다.

만약 파일을 계속 옮기고 싶지 않으신 분은 환경변수를 설정하시는 것을 추천합니다. 

 

 

 

그런 다음 cmd 창에서 

ffmpeg -i "가호(Gaho) - 시작 (이태원 클라쓰 OST PART02)  가사 ITAEWON CLASS OST.mp4" new.mp3

을 입력해춥니다. 

 

마지막에 있는 new.mp3은 이름을 무엇으로 저장할 것인지입니다. 다른 이름으로 하셔도 됩니다. 

 

실행결과

new파일이라는 mp3가 생성되었습니다. 

 

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

'파이썬' 카테고리의 다른 글

Rest, RestFul이란?  (0) 2020.04.03
requests의 tuple과 dict 차이  (0) 2020.04.03
아나콘다(Anaconda) 설치법  (0) 2020.04.01
웹 스크래핑 및 머신러닝 딥러닝 개념  (0) 2020.04.01
유닛테스트(unittest) 사용법  (0) 2020.03.31

 

아나콘다(Anaconda)란?

파이썬의 배포판인데요, 수 백가지의 파이썬 패키지를 포함하고 있고 무료로 사용할 수 있습니다. 

패키지에도 용이하고 개발에도 용이합니다. 

 

아나콘다 설치하는 법을 알려드리도록 하겠습니다.

아래 사이트를 이용해주세요!

https://www.anaconda.com/distribution/

 

 

저 사이트에 들어가서 저와같이 다운받아주시면 됩니다. 윈도우를 쓰고 있으시면 윈도우 맥을 쓰고 있으시면 맥용을 다운 받아주세요! 

 

환경변수 설정 단계입니다. 저처럼 Add 는 추가 안 해주고 Register Anaconda3체크해줍니다.

 

 

글 보다는 그림으로 간결하게 하는 게 나을 것 같아서 글은 많이 안 적었습니다. 

웹 스크래핑(Web Scraping)


1. 실시간 개념이 존재 가능
2. 필요로 하는 특정 정보를 추출
3. 가공 및 저장해서 비교 분석 자료로 활용
4. 주로 CMS 어플리케이션의 원천 기술
5. 프로토콜(Protocol), 브라우저 방식 존재

 


머신러닝
(인간의 학습을 통해 컴퓨터 또는 기계 구현)


1. 알고리즘을 통해 데이터를 분석 및 학습 -> 컴퓨터로 학습 내용을 기반으로 판단, 추세, 예측
2. 대량의 데이터와 알고리즘을 통해 학습시키는 것에 목표
3. 문자, 음성, 얼굴, 지문, 게임, 의료, 로봇 등 다양한 분야에서 사용된다.
ex) 아마존 기존 상품에 있는 상품평(리뷰)가 있는데 판매자는 리뷰에 예민하다. 왜냐하면 판매량 때문에 그렇다. 

아마존은 돈을 받고 올린 듯한 리뷰(조작) 의미없는 리뷰, 그 밖에 규정에 어긋나는 리뷰 이런 것들을 자동삭제하거나 관리자에게 통보 

머신러닝

학습을 하면 인간이 개입해야 된다.

딥러닝


학습을 하면 인간이 개입하지 않는다.
시스템 서능 GPU가 좋아야 한다.
ex) 알파고는 CPU 1202, GPU 176, 서버급 300대가 필요하다.

 


머신러닝의 프로세스


1. 데이터 수집 2. 데이터 가공 3. 데이터 학습 4. 학습 방법 선택 5 매개변수 조정 6. 모델학습 7. 정확도 평가 -> 성공 


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

1. 유닛테스트

python에서는 unittest(Unit testing framework) 모듈을 사용할 수 있다. 
유닛테스트 코드를 작성하기 위해서는 다음과 같은 절차를 따른다.

1. import unittest
2. unittest.TestCase로 부터 파생된 사용자 테스트 클래스를 만든다.
3. 테스트 클래스 안에 "test"로 시작하는 테스트 메서드를 생성한다. 
테스트 메서드에서는 일반적으로 테스트하고자 하는 함수나 메서드를 호출하고
그 결과값을 self.assert*() 메서드를 사용하여 확인한다.(assertEqual, assertTure, assertFalse, assertRaises, assertReget 등)
4. 테스트 클래스가 완성되면, unittest.main()을 호출하여 테스트를 실행

밑에는 유닛 테스트의 예시이다.

#myCalc.py

def add(a, b):
    return a + b

def substract(a, b):
    return a - b

 test.py 코드는 unittest.TestCase로 부터 파생된 MyCalcTest 클래스로 작성, test_add와 test_substract 테스트 메서드를 작성하였고, 그 안에서 myCalc함수를 실행한 결과 self.assertEqual()를 사용하여 검사, 마지막으로 unittest.main()이 실행되면, 테스트 메서들이 실행하게 된다.

#test.py
import unittest
import myCalc

class MyCalcTest(unittest.TestCase):

    def test_add(self):
        c = myCalc.add(20, 10)
        self.assertEqual(c, 30)

    def test_substract(self):
        c = myCalc.substract(20, 10)
        self.assertEqual(c, 10)

if __name__ == '__main__':
    unittest.main()
    

, 파이썬의 unittest는 전체 스크립트 단위, 테스트 클래스 단위, 메서드/함수 단위로 실행할 수 있다. 

 

2. Test Fixture

테스트 전에 테스를 위한 사전 준비 작업을 필요할 때 쓴다. 또한, 테스트가 끝난 후 Clean up을 해야하는 경우에 쓴다. unittest는 이렇게 사전 준비 작업을 위해 setUp() 이라는 메서드를, 사후 Clean up 처리를 위해 tearDown()이라는 메서드를 사용할 수 있다.

테스트 메서드가 실행되기 전과 후에 매번 실행된다.

#myUtil.py
import os

def filelen(filename):
    f = open(filename, "r")
    f.seek(0, os.SEEK_END)
    return f.tell()

def count_in_file(filename, char_to_find):
    count = 0
    f = open(filename, "r")
    for word in f:
        for char in word:
            if char == char_to_find:
                count += 1
    return count

 

아래 코드는 test_filelen(), test_count_in_file() 두 개의 메서드를 가지고 있다. 테스트 메서드가 실행되기 전에 setUP() 메서드가 실행되어 테스트 파일을 생성, 테스트 실행 후 testDown()메서드가 실행하여 사용한 테스트 파일을 지우게 된다.

 

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

+ Recent posts