다양한 분야 공부

파이썬 혼자놀기 패키지_1일차 파이썬 시작하기

Conpresent 2020. 10. 5. 22:17

https://spartacodingclub.kr/

 

 

 

 

 

파이썬 기초 공부

변수&기초연산

a = 3 # 3을 a에 넣는다
b = a # a를 b에 넣는다
a = a + 1 # a+1을 다시 a에 넣는다

num1 = a*b # a*b의 값을 num1이라는 변수에 넣는다
num2 = 99 # 99의 값을 num2이라는 변수에 넣는다

# 변수의 이름은 마음대로 지을 수 있음!
# 진짜 "마음대로" 짓는 게 좋을까? var1, var2 이렇게?

 

자료형 _ 숫자, 문자형

name = 'bob' # 변수에는 문자열이 들어갈 수도 있고,
num = 12 # 숫자가 들어갈 수도 있고,

is_number = True # True 또는 False -> "Boolean"형이 들어갈 수도 있습니다.

#########

# 그리고 List, Dictionary 도 들어갈 수도 있죠. 그게 뭔지는 아래에서!

 

자료형 _ 리스트형(Javascript의 배열형과 동일)

a_list = []
a_list.append(1) # 리스트에 값을 넣는다
a_list.append([2,3]) # 리스트에 [2,3]이라는 리스트를 다시 넣는다

# a_list의 값은? [1,[2,3]]
# a_list[0]의 값은? 1
# a_list[1]의 값은? [2,3]
# a_list[1][0]의 값은? 2

* 0부터가 시작이다!

 

자료형 _ Dictionary 형 (Javascript의 dictionary형과 동일)

a_dict = {}
a_dict = {'name':'bob','age':21}
a_dict['height'] = 178

# a_dict의 값은? {'name':'bob','age':21, 'height':178}
# a_dict['name']의 값은? 'bob'
# a_dict['age']의 값은? 21
# a_dict['height']의 값은? 178

 

자료형 _ Dictionary 형과 List형의 조합

people = [{'name':'bob','age':20},{'name':'carry','age':38}]

# people[0]['name']의 값은? 'bob'
# people[1]['name']의 값은? 'carry'

person = {'name':'john','age':7}
people.append(person)

# people의 값은? [{'name':'bob','age':20},{'name':'carry','age':38},{'name':'john','age':7}]
# people[2]['name']의 값은? 'john'

조건문 _ if/else로 구성

if age > 20:
  print('성인입니다') # 조건이 참이면 성인입니다를 출력

else:
  print('청소년이에요') # 조건이 거짓이면 청소년이에요를 출력

is_adult(30)
# 무엇이 출력될까요?

반복문

파이썬에서의 반복문은 리스트의 요소들을 하나씩 꺼내쓰는 형태입니다.

즉, 무조건 list와 함께 쓰인다.

fruits = ['사과','배','감','귤']


for fruit in fruits: 
  print(fruit)

 

# 사과, 배, 감, 귤 하나씩 꺼내어 찍힙니다.

 

그밖의 내장 함수들 _문자열 자르기

txt = 'sparta@gmail.com'

result = txt.split('@')[1].split('.')[0]

print(result)

그밖의 내장 함수들 _문자열 바꾸기

 

 

패키지? 라이브러리? →
Python 에서 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위이고, 이런 패키지의 묶음을 라이브러리라고 합니다. 하지만 보통 패키지와 라이브러리는 혼용해서 많이 써요 😄 지금 여기서는 외부 라이브러리를 사용하기 위해서 패키지를 설치합니다.

즉, 여기서는 패키지 설치 = 외부 라이브러리 설치!

 

 

 

 

 

 

Windows : File → setting → project interpreter
Mac : Preference → Project Interpreter

 

3. pip(python install package) 사용 - dload 패키지 설치해보기

앱을 설치할 때 앱스토어/플레이스토어를 가듯이, 새로운 프로젝트의 라이브러리를 가상환경(공구함)에 설치하려면 pip 를 이용하게 됩니다.

project interpreter 화면에서 + 버튼을 누르면 아래 창이 뜹니다!

맥은 아래 쪽에, 윈도우는 오른쪽에 있어요. 사진은 맥 버전!

 

dload는 URL로부터 파일 다운로드를 해주는 패키지입니다. 이 패키지를 이용해서 이미지를 내려받아볼게요!

[코드스니펫] - dload 써보기

import dload dload.save("https://spartacodingclub.kr/static/css/images/ogimage.png")

다른 이름으로 저장도 해볼까요?

import dload dload.save("https://spartacodingclub.kr/static/css/images/ogimage.png", 'sparta.png')

 

 

 

 

이미지 웹스크롤링하기

  • 신문 스크래핑 📰✂️해보셨나요? 신문에서 원하는 기사만 오려서 정보를 추리는 것을 스크래핑이라고 하죠? 웹 스크래핑도 똑같습니다.

웹 스크래핑(web scraping)은 웹 페이지에서 우리가 원하는 부분의 데이터를 수집해오는 것입니다. (한국에서는 같은 작업을 크롤링 crawling 이라는 용어로 혼용해서 씁니다.)

  • 구글 검색할 때는 web scraping 으로 검색해야 우리가 배우는 페이지 추출에 대한 결과가 나오니 참고하세요.

참고 Web Scraping(wikipedia) / Web Crawler(wikipedia) Web Scraping vs Web Crawling: What’s the Difference?

 

파이썬으로 브라우저 제어하기

웹 스크래핑을 하기 위해서는 특정 웹페이지를 구성하는 HTML 정보를 받아와야하는데요! 여러 방법이 있지만 우리는 파이썬으로 크롬 브라우저를 직접 제어하여 웹페이지를 띄우고 HTML을 읽어오도록 하겠습니다

  • selenium 패키지를 이용하면 브라우저를 제어할 수 있습니다.
  • 우선 패키지를 설치해볼까요? dload 설치할 때와 똑같은 방법으로 하면 됩니다 😎
    • project interpreter 로 접근해서 + 버튼 누르기

      ㄴ Windows : file → setting → project interpreter

      ㄴ Mac : preference → project interpreter로 접근

    • selenium 검색해서 install 버튼 눌러 설치

셀레니움을 사용하기 위해서는 웹드라이버라는 파일도 필요하답니다.

크롬 브라우저를 열어 Settings > About Chrome에서 버전이 85.X이 맞는지 확인해주세요!

[코드스니펫] - 셀레니움 웹드라이버 설치 링크

<https://chromedriver.storage.googleapis.com/index.html?path=85.0.4183.87/>

  • 이 링크에서 운영체제에 맞는 파일을 찾아 다운로드 받고, 압축을 풀어서 sparta 폴더로 옮겨주세요.

이제 파이썬으로 브라우저를 제어해보겠습니다!

[코드스니펫] - 셀레니움 시작코드

from selenium import webdriver
driver = webdriver.Chrome('chromedriver')

driver.get("http://www.naver.com")

 

웹 스크래핑 해보기

바로 직접 해보면서 배워보도록 하죠! 다음에서 '아이유'를 검색해 이미지들을 스크래핑해올게요 🙂

[코드스니펫] - 다음검색결과

<https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EC%95%84%EC%9D%B4%EC%9C%A0>

패키지 추가 설치하기 (beautifulsoup4)

project interpreter에서 bs4를 검색해 다운로드받아주세요!

크롤링 기본 세팅

[코드스니펫] - 크롤링 기본 세팅

from bs4 import BeautifulSoup
from selenium import webdriver
import time

driver = webdriver.Chrome('chromedriver') # 웹드라이버 파일의 경로 driver.get("https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EC%95%84%EC%9D%B4%EC%9C%A0")
time.sleep(5) # 5초 동안 페이지 로딩 기다리기

req = driver.page_source
# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(req, 'html.parser')

###################################
# 이제 여기에 코딩을 하면 됩니다!
###################################

driver.quit() # 끝나면 닫아주기

select / select_one의 사용법을 익혀봅니다.

이미지 링크 가져와보기!

태그 안의 텍스트를 찍고 싶을 땐 → 태그.text
태그 안의 속성을 찍고 싶을 땐 → 태그['속성']

from bs4 import BeautifulSoup
from selenium import webdriver
import time

driver = webdriver.Chrome('chromedriver') # 웹드라이버 파일의 경로 driver.get("https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EC%95%84%EC%9D%B4%EC%9C%A0")
time.sleep(5) # 5초 동안 페이지 로딩 기다리기

req = driver.page_source

soup = BeautifulSoup(req, 'html.parser')

thumbnails = soup.select("#imgList > div > a > img")

for thumbnail in thumbnails:
src = thumbnail["src"]
print(src)

driver.quit() # 끝나면 닫아주기

beautifulsoup 내 select에 미리 정의된 다른 방법을 알아봅니다

# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')

# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')

# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')

항상 정확하지는 않으나, 크롬 개발자도구를 참고할 수도 있습니다.

  1. 원하는 부분에서 마우스 오른쪽 클릭 → 검사
  2. 원하는 태그에서 마우스 오른쪽 클릭
  3. Copy → Copy selector로 선택자를 복사할 수 있음

 

11) 이미지 저장하기

  • 위에서 설치해놓은 dload 파이썬 패키지를 이용해서 이미지를 다운로드 받아봅시다!

  • 우선 이미지를 저장할 imgs 폴더를 만들어주세요.

  • 각 파일의 이름은 1.jpg, 2.jpg, ... 이런 식으로 저장해줄게요.

 

import dload
from bs4 import BeautifulSoup
from selenium import webdriver
import time

driver = webdriver.Chrome('chromedriver') # 웹드라이버 파일의 경로
driver.get("<
https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EC%95%84%EC%9D%B4%EC%9C%A0>")
time.sleep(5) # 5초 동안 페이지 로딩 기다리기

req = driver.page_source

soup = BeautifulSoup(req, 'html.parser')

thumbnails = soup.select("#imgList > div > a > img")

i=1
for t
humbnail in thumbnails:
  src = thumbnail["src"]
  dload.save(src, f'imgs/{i}.jpg')
  i+=1

driver.quit() # 끝나면 닫아주기