슈코딩
Python & DB & Web Scraping 본문
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 |