본문 바로가기
들은 강의

[웹개발 입문 강의] [Python] 기본 문법, 라이브러리, 크롤링

by hotdog7778 2023. 6. 8.

스파르타 코딩클럽 웹개발 종합반 인강 - 공부 기록

 

수강 시작 ~ 

2023. 06. 06 ~ 

 

https://github.com/hotdog7778/sparta


1. 파이썬 강의 목적

이미지로 이해하고 진행. 파이썬 언어를 배워서 서버를 만들자.

 

 

 

2. 파이썬 설치

# 맥북에 기본 설치되어 있는 파이썬 버전 확인
python3 -V

# 설치 위치 확인
where python

# 편하게 쓰려고 환경변수 설정
cd

vi .bash_profile

alias python='/usr/bin/python3' #추가

source ~/.bashrc

# 파이썬 버전 확인
python -V

 

 

3. 파이썬 설치의 의미

컴퓨터에게 명령을 내리려고.

컴퓨터에게 한국어로 또는 영어로도 명령할 수 있지만, 한국어나 영어를 컴퓨터가 알아 들을 수 있게 해주는 번역 팩이 있어야한다. 그렇다면 내가 PC에 파이썬을 설치한다는 것은, 컴퓨터가 파이썬을 알아들을 수 있도록 번역팩을 설치한다고 할 수 있다.

 

 

4. 파이썬 문법

변수 > 자료형 > 함수 > 반복문 >조건문 순서로 학습할 예정

# 변수
a = 2
b = 3
print(a+b)

# 자료형 list
c = ['사과','배','감']
print(c[0]) # 사과
print(c[1]) # 배

# 자료형 딕셔너리
d = { 'name':'영수', 'age':24 }
print(d)
print(d['name'])
print(d['age'])

# 함수
def hey(): # 함수를 선언하다.
    print('헤이!') # 파이썬에서는 ' : ' 이후에는 tab을 해줘야 한다.

hey() # 헤이!

##########

def sum(a,b,c):
    return a+b+c

result = sum(1,2,3)

print(result) # 6
# 조건문
age = 25

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

# 반복문
ages = [5,10,13,23,25,9]

for a in ages: # ages의 하나하나씩을 가져와서 a로 넣고 아래서 a를 사용한다.
    # print(a)
    if a > 20:
        print('성인')
    else:
        print('청소년')

 

 

5. 남이만든 라이브러리 사용하는 방법

설치하는 방법이 살짝 까다롭다.

터미널에서 python -m venv venv 명령을 실행하면 venv 폴더가 생성된다. 그리고 vscode에서 터미널을 다시 실행시키고, 인터프린터를 Python 3.9.6 (’venv’: venv) 로 선택한다.

지금부터는 이 폴더에서 라이브러리를 가져다 쓴다는 뜻이다.

라이브러리 설치 하기

# pip install 라이브러리이름
pip install requests

설치한 라이브러리를 사용해 보기

requests는 fetch의 역할과 같은녀석 이다.

import requests # requests 라이브러리 설치 필요

r = requests.get('<http://spartacodingclub.shop/sparta_api/seoulair>') # 미세먼지 API
rjson = r.json()

# print(rjson['RealtimeCityAir']['row'])
rows = rjson['RealtimeCityAir']['row']

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

자세한 사용법은 request python docs 참고.

 

 

6. 크롤링

웹페이지에서 정보들을 가져오는 것.

 

6.1 필요한 라이브러리 임포트

pip install bs4

6.2 다음영화 랭킹 페이지에서 크롤링 해보기

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')

# print(soup) # 페이지의 HTML이 출력된다.

title = soup.select_one('#mainContent > div > div.box_ranking > ol > li:nth-child(1) > div > div.thumb_cont > strong > a') 
                        # 위에 URL 들어가서 예매율 1등 영화 제목 우클릭 > 검사 > 드래그되어있는 곳 우클릭 > 복사 > selector복사 한 값을 넣었습니다.

print(title) # 범죄도시3
print(title.text) # 범죄도시 3
print(title['class']) # ['link_txt']

 

6.3 다음영화 랭킹 페이지에서 제목, 순위, 평점 같이 크롤링 해보기

영화 제목을 개발자도구에서 봤을때

<li> ~~ </li>

<li> ~~ </li>

<li> ~~ </li>

<li> ~~ </li>

이런 구조로 되어있었는데, ~~ 안에 영화제목, 순위, 평점이 모두 들어있었다는 것을 활용하자.

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')

# title = soup.select_one('#mainContent > div > div.box_ranking > ol > li:nth-child(1) > div > div.thumb_cont > strong > a') 
lis = soup.select('#mainContent > div > div.box_ranking > ol > li') 
                        
for li in lis:
    rank = li.select_one('.rank_num').text # 예매 순위
    title = li.select_one('.link_txt').text # 영화 제목
    rate = li.select_one('.txt_grade').text # 영화 평점
    print(rank,title,rate)
    
# Tip) strip(), replace() 같은걸 써서 클렌징 작업을 해줄 수 있다.

<li> ~ </li> 찾기