[이노베이션캠프] 웹개발 종합반 - 3주차(파이썬)

Chaewon Yoon (Jamie)·2022년 7월 24일
0
post-thumbnail

[수업 목표]
1. 파이썬 기초 문법을 안다.
2. 원하는 페이지를 크롤링 할 수 있다.
3. pymongo를 통해 mongoDB를 제어할 수 있다.

  • 리스트 형 (Javascript의 배열형과 동일)
    a_list = []
    a_list.append(1)     # 리스트에 값을 넣는다
    
  • Dictionary 형 (Javascript의 dictionary형과 동일)
    a_dict = {}
    a_dict = {'name':'bob','age':21}
    a_dict['height'] = 178 //추가
    
  • Dictionary 형과 List형의 조합
    people = [{'name':'bob','age':20},{'name':'carry','age':38}]
    
    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'

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

  • 무조건 리스트와 함께 쓰입니다!
    fruits = ['사과','배','감','귤']
        for fruit in fruits:
    	print(fruit)
       # 사과, 배, 감, 귤 하나씩 꺼내어 찍힙니다.
  • 딕셔너리 예제
    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'])
                
    # 이번엔, 반복문과 조건문을 응용한 함수를 만들어봅시다.
    # 이름을 받으면, age를 리턴해주는 함수
    def get_age(myname):
    		for person in people:
    			if person['name'] == myname:
    				return person['age']
    		return '해당하는 이름이 없습니다'
    print(get_age('bob'))
    print(get_age('kay'))

    Quiz)지니뮤직의 1~50위 곡을 스크래핑 해보세요.

👻 힌트:
0) 출력 할 때는 `print(rank, title, artist)` 하면 됩니다!
1) 앞에서 두 글자만 끊기! `text[0:2]` 를 써보세요!
2) 순위와 곡제목이 깔끔하게 나오지 않을 거예요. 옆에 여백이 있다던가, 다른 글씨도 나온다던가.. 파이썬 내장 함수인 `strip()`을 잘 연구해보세요!
import requests
from bs4 import BeautifulSoup

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

songs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for song in songs:
    a = song.select_one('td.info > a.title.ellipsis')

    if a is not None:
        title = a.text.strip()
        rank = song.select_one('tr:nth-child(n) > td.number').text[0:2].strip()
        artist = song.select_one('td.info > a.artist.ellipsis').text

        print(rank, title, artist)
        
profile
keep growing as a web developer!🧃

0개의 댓글