슈코딩

Python & DB & Web Scraping 본문

코딩공부/Python

Python & DB & Web Scraping

Roshu 2022. 4. 19. 18:43

 

1.Python

-파이썬 문법은 Javascript보다 훨씬 더 직관적이다.

-문법 : 변수 / 자료형 / 함수 / 조건문 / 반복문

#변수
a=2
b=3

print(a+b) 하면 5가 출력된다. 

#자료형
a_list = ['사과', '배', '감'] ->list 형태
추가 할때는 .append를 사용한다.

a_dict = {'name' : 'bob', 'age' : 27 } -> 딕셔너리 형태

#함수

*파이썬은 들여쓰기에 따라 내용물인지 아닌지가 결정된다* 

def sum(a,b)
      return a+b

result = sum(1,2)
print(result) 결과는 3이 나온다.

#조건문

 

def is_adult(age):
      if age > 20:
print('성인입니다')
      else:
print('청소년입니다')



#반복문

fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']

for fruit in fruits:
     print(fruit)


List의 내용들이 순서대로 출력이된다.


2. Python 을 이용한 웹스크래핑(크롤링)

-웹스크래핑(크롤링)을 하기위해
-> 웹스크래핑에 필요한 라이브러리(남이 만든) 즉, 패키지를 설치해서 사용한다.
-> 스크래핑할 html을 가져온다.


(예시1) requests 라는 라이브러리(패키지)를 설치했으면, 아래의 코드를 넣어서 적용해야 사용할 수 있다.

import requests 

r = requests.get('url')
rjson = r.json()



(예시2) 웹스크래핑(크롤링) 의 기본세팅

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('url', headers=headers)

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

 

(본격) 스크래핑


위에 틀을 가지고 이제 네이버영화 페이지에서 제목, 순위, 별점 등을 스크래핑 할 수 있다.


제목 부분을 마우스우측클릭 후 검사창을 실행한다.


위 사진처럼 copy selector를 누른후 파이참으로 가져와서

title = soup.select_one('copy selector한것')
작성후 print(title) 하게되면
제목 코드가 나온다. 

제목만 출력하고 싶으면 print(title.text)를 하면 된다.

전체 리스트를 가져오고 싶을땐 copy selector한것의 공통된 부분들을 제거하고

movies = soup.select('#old_content > table > tbody > tr')

for movie in movies:
    a = movie.select_one('td.title > div > a')
    if a is not None:

        print(a.text)


이렇게 작성하면 제목만 나오는것을 볼수 있다. #None 이라고 출력되는 가로줄을 없애기 위해 조건문을 이용한것이다.


#응용

 

이렇게 스크래핑을 하여 순위, 제목, 평점을 가져올 수 있다.

3. DB ( Data Base )

DB란? 
> 데이터를 정렬되게 잘 쌓고 잘 찾아와서 사용하기 위한 프로그램이다.

DB의 종류
-SQL
>엑셀에 저장하는것과 유사, 정형화, 데이터의 일관성, 분석에 용이
-NoSQL ( Not only SQL )
>데이터가 그때 그때 쌓임, 초기스타트업 유리, 유연함

#이번 수업에 사용할 DB는 컴퓨터에 설치하지않고 Clud 형태로 제공하는 mongoDB Atlas 를 사용!
> 클라우드에서 mongoDB Atlas가 제공해주는 컴퓨터를 빌려다가 사용하는 개념! 트렌드! 연습하는선에선 무료!

#실습
-mongoDB 사이트에 가입후 절차에 따라 대여 완료후 !

 pymongo 기본코드를 파이썬에 삽입한다.

from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
db = client.dbsparta


기본코드를 삽입후에 아래의 코드들로 DB를 조작한다.

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.8r5tq.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta

# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
all_users = list(db.users.find({},{'_id':False}))

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})



*피드백 - 퀴즈 푸는 도중 반복문을 사용하지않은 실수를함.

sames = list(db.movies.find({'star': movie},{'_id':False}))
for same in sames:
    print(same['title'])

 

위코드에서 for문을 넣지 않고 실행해서 에러가 났었다.

전체리스트를 훑어서 여러개를 찾을때 반복문을 넣어야 한다!


마지막 3주차 과제는 -지니뮤직 스크래핑-

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



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

for music in musics:
    imt = music.select_one('span')
    rank = music.select_one('td.number').text[0:2].strip()
    title = music.select_one('td.info > a.title.ellipsis').text.strip()
    if '19금' in title:
        title = "19금" + title.lstrip('19금').strip()
        # 19금 단어를 제거하고, 19금 단어를 추가한뒤 공백제거
    artist = music.select_one('td.info > a.artist.ellipsis').text.strip()

    print(rank, title, artist)

과제를 하면서 한가지 문제가 있었는데, 바로 19금 단어 쪽의 공백공간이 안없어진다는 점이었다.

    if '19금' in title:
        title = "19금" + title.lstrip('19금').strip()

그래서 구글링을 통해 이러한 비슷한 케이스를 찾아서 위 코드를 삽입하니 해결이 되었다.


3주차에선 파이썬을 다뤄보고, DB를 다뤄보고, 스크래핑도 했는데 신기하고 점점 재밌는 과정이되어가는게 느껴졌다.
중간에 DB 연결 할때 <> 부분에 user 아이디 비밀번호를 입력해서 연결에 애먹었지만, 결국 해결해서 
연결되었을때 기뻤다. 이런게 문제를 해결하는 느낌인건가 싶은 생각도 들어서 아주 간단한거였지만 
앞으로 또 어떤 문제가 닥칠지 기대(?)가 된다.

이로써 3주차강의 종료!

'코딩공부 > Python' 카테고리의 다른 글

[Python] PEP8 스타일  (0) 2022.06.29
[Python] 문법 복습 심화 학습  (2) 2022.04.25
[Python] 계산기 만들기  (0) 2022.04.17
Comments