• 2020. 10. 5.

    by. Conpresent

    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() # 끝나면 닫아주기