Pythonで転がしてみた部分.1


Web scrapingとは?


Web scripting(Web scripting)は、Webページから私たちが望んでいるデータの一部を収集する方法で、「スクロール」(Crawling)という言葉に混用されています。


1.Python基礎文法


変数&基本演算
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
  • 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)
    # 무엇이 출력될까요?
    複文
    -Pythonでの複文はリストの要素を1つずつ出して書く形式です->必ずリストと一緒に書きます!
  • リスト例
  • fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
    
    count = 0
    for fruit in fruits:
    	if fruit == '사과':
    		count += 1
    
    print(count)
    
    # 사과의 갯수를 세어 보여줍니다.
  • ディック郡例
  • people = [{'name': 'bob', 'age': 20}, 
             {'name': 'carry', 'age': 38},
             {'name': 'john', 'age': 7},
             {'name': 'smith', 'age': 17},
             {'name': 'ben', 'age': 27}]
    
    # 모든 사람의 이름과 나이를 출력해봅시다.
    for person in people:
       print(person['name'], person['age'])
    
    
    # 이번엔, 반복문과 조건문을 응용해봅시다.
    # 20세 보다 많은 사람만 출력하기
    for person in people:
       if person['age'] > 20:
           print(person['name'], person['age'])
    その他の組み込み関数
    クリップ
  • 文字列
  • txt = '[email protected]'
    
    result = txt.split('@')[1].split('.')[0]
    
    print(result)
  • 置換文字列
  • txt = '[email protected]'
    
    result = txt.replace('gmail','naver')
    
    print(result)

    2.Pythonパッケージ

  • パッケージ:Pythonからモジュール(機能セット)を収集するユニット
  • ライブラリ:パッケージ
  • 仮想環境(Virtual Environment):
  • 、プロジェクト別パッケージ

    3.dlloadとseleniumで画像を保存する

  • dlloadライブラリ:URLからファイルをダウンロードするパッケージ
  • import dload
    
    dload.save("https://spartacodingclub.kr/static/css/images/ogimage.png", 'sparta.png')
  • Seleniumパッケージ:ブラウザを制御可能なパッケージ
  • from selenium import webdriver
    driver = webdriver.Chrome('chromedriver')
    
    driver.get("http://www.naver.com")
  • bs 4ライブラリ(BeautifulSoup):HTMLおよびXMLファイルから必要なデータを簡単に解析できるライブラリ
  • 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() # 끝나면 닫아주기
    # 선택자를 사용하는 방법 (copy selector)
    soup.select('태그명')
    soup.select('.클래스명')
    soup.select('#아이디명')
    
    soup.select('상위태그명 > 하위태그명 > 하위태그명')
    soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
    
    # 태그와 속성값으로 찾는 방법
    soup.select('태그명[속성="값"]')
    
    # 한 개만 가져오고 싶은 경우
    soup.select_one('위와 동일')
    アーティストイメージの検索と保存
    import dload
    from bs4 import BeautifulSoup
    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome('chromedriver') # 웹드라이버 파일의 경로
    driver.get("https://search.daum.net/search?nil_suggest=btn&w=img&DA=SBC&q=nct+%EC%9E%AC%ED%98%84")
    time.sleep(5) # 5초 동안 페이지 로딩 기다리기
    
    req = driver.page_source
    
    soup = BeautifulSoup(req, 'html.parser')
    
    thumbnails = soup.select("#imgList > div > a > img")
    
    i=1
    for thumbnail in thumbnails:
       src = thumbnail["src"]
       dload.save(src, f'imgs_homework/{i}.jpg')
       i+=1
    
    driver.quit() # 끝나면 닫아주기
  • 結果