파이썬 (Python)

박영준·2023년 5월 25일
0

Python

목록 보기
1/10

1. 기본 문법

# 기본 연산
a = 3
b = 2
print(a + b)


# 문자 자료형
a = '대한'
b = '민국'
print(a + b)


# 리스트형
a = ['사과','배','감']
print(a[0])
print(a[2])


# Dictionary 형
a= {'name':'영수','age':24}
print(a)
print(a['name'])


# 함수 1
    # Python에서는 {} 대신 콜론(:)
    # Python에서는 줄을 반드시 맞춰야 실행된다
def hey():
    print('헤이!')

hey()


# 함수 2
def sum(a, b, c):   # 1, 2, 3 이 각각 a, b, c 에 들어간다
    return a+b+c    # 6

result = sum(1, 2, 3)   # return 에 의해 6으로 변한다

print(result)


# 조건문
age = 25

if age > 20:
    print('성인')
else:
    print('청소년')


# 반복문 (+ 조건문)
ages = [5, 10, 13, 23, 25, 9]

for a in ages:      # ages 에서 데이터를 하나씩 가져와서 a 에 넣는다
    if a > 20:
        print('성인')
    else:
        print('청소년')
  • 실행 결과

2. 파이썬 패키지

1) 정의

가상환경

  • 가상환경 : 라이브러리를 담아두는 폴더

  • (venv)

    • 해당 메시지가 뜨면 가상환경이 활성화된 것
    • "라이브러리를 venv 에서 가져오겠다." "라이브러리를 venv 폴더에 설치하곘다." 는 의미
    • python -m venv venv

requests 패키지

  • pip install requests 명령어로 패키지를 설치하기

만약 파이썬 패키지 설치 시, 에러 발생한다면?
참고: 파이썬 pip 에러

크롤링

  • html 에서 어떤 부분을 가져오는 것

bs4 패키지

  • pip install bs4 명령어로 패키지를 설치하기(Beautiful Soup)

  • 크롤링을 더욱 쉽고 빠르게 해줄 수 있게 만듦

2) 예시

예시 1 : requests 패키지

import requests

r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()

rows = rjson['RealtimeCityAir']['row']

for a in rows:
    gu_name = a['MSRSTE_NM']
    gu_mise = a['IDEX_MVL']
    print(gu_name, gu_mise)

  • 자바스크립트에서 fetch를 사용하는 것과 동일하게,
    파이썬에서는 requests 패키지(라이브러리) 를 이용해서 데이터를 가져온 것

예시 2 : bs4 패키지 - select_one

import requests
from bs4 import BeautifulSoup

URL = "https://movie.daum.net/ranking/reservation"
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(URL, headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')

# select_one : 하나만 가져오기
    # '' 안에는 selector 복사로 가져온 내용을 붙여넣기 
title = soup.select_one('#mainContent > div > div.box_ranking > ol > li:nth-child(9) > div > div.thumb_cont > strong > a')

print(title)            # 출력 결과 : <a class="link_txt" data-tiara-layer="moviename" href="/moviedb/main?movieId=161806">스즈메의 문단속</a>
print(title.text)       # 출력 결과 : 스즈메의 문단속
print(title['href'])    # 출력 결과 : /moviedb/main?movieId=161806

예시 3 : bs4 패키지 - select, 클래스명으로 불러오기

# 기존 : li 중 9번째를 가리켰음 (li = 영화 1개)
    # #mainContent > div > div.box_ranking > ol > li:nth-child(9) > div > div.thumb_cont > strong > a
# 변경 후 : 모든 li 리스트를 가져오고 싶을 때
    # select : 가져오기
lis = soup.select('#mainContent > div > div.box_ranking > ol > li')

for li in lis:
    # .link_txt : 설정돼 있던 클래스 이름. 이를 불러오기 위해
    title = li.select_one('.link_txt').text         # print(title.text) 에서 text만 여기 붙여도 의미 동일
    print(title)

예시 4 : bs4 패키지 - 데이터 여러개, strip(), replace()

lis = soup.select('#mainContent > div > div.box_ranking > ol > li')

for li in lis:
    rank = li.select_one('.rank_num').text      # rank_num 클래스명의 데이터 가져옴
    title = li.select_one('.link_txt').text.strip()     # 출력 결과 中 띄어쓰기가 같이 나올 경우에 앞뒤에 띄어쓰기를 모두 제거
    rate = li.select_one('.txt_grade').text.replace(',','')     # 출력 결과 中 , 도 없앨 수 있음
    print(rank,title)

예시 5 : 웹스크래핑 연습

코드에 해당 지니뮤직 'URL' 넣기

import requests
from bs4 import BeautifulSoup

URL = "https://movie.daum.net/ranking/reservation"
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=20230101', headers=headers)          # 지니뮤직 'URL' 넣기

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

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

for tr in trs:
    number = tr.select_one('td.number').text[0:2].strip()       # text[0:2] : 앞에서 두 글자만 끊는다
    title = tr.select_one('td.info > a.title.ellipsis').text.strip()
    singer = tr.select_one('td.info > a.artist.ellipsis').text

    print(number,title,singer)

  • 주의!
    • 순위, 제목, 가수 를 찾을 때 .number 만 넣으면 지저분한 형태로 출력된다.
    • >. 으로 코드를 이어준다
    • 순위, 제목, 가수 또한 copy selector 로 복사해올 수 있다
profile
개발자로 거듭나기!

0개의 댓글