-
[개발일지] 웹개발 종합반 3주Study/Development 2022. 7. 24. 00:49
<스파르타코딩 웹개발종합반 수강일지>
웹개발 종합반 3주차 수강
수업내용: Python / DB(mongoDB)
1. Python 기본 문법: 변수 / 자료형 / 함수 / 조건문 / 반복문
2. Python 웹 크롤링
3. DB: mongoDB 연결하여 data 올리기
Python을 처음 배웠는데, 생각보다 훨씬 간단한 문법에 놀랐고, 크롤링 원리를 알게되어 재밌었다.
여러 패키지를 다운받아야 하는데, 그 패키지를 잘 기억해두어야겠다.
DB 연결이 잘 안되어 해멨으나, 도움을 받아 FAQ로 해결하였다.
또한, 크롤링 시 원치않는 자료가 자꾸 끌어와져 제외시키는데 정말 고생했다.
<과제>
Genie 음악 순위사이트 크롤링하기: 순위 / 제목 / 가수명
<기억할것들>
1. Python 기초 문법
- 변수 / 자료형 / 함수 / 조건문 / 반복문
-변수&기본연산
# 변수&기본연산 a = 1 b = 2 print(a+b) # 3
-자료형
# 자료형 # 1. 숫자, 문자형 name = 'bob' # 문자열 num = 12 # 숫자 is_number = True # True 또는 False -> "Boolean" # 2. 리스트형 a_list = [] a_list.append(1) # a_list = [1] a_list.append([2,3]) # a_list = [1,[2,3]] # a_list[0] = 1 # a_list[1] = [2,3] # a_list[1][0] = 2 # 3. Dictionary형 a_dict = {} a_dict = {'name':'bob','age':21} a_dict['height'] = 178 # 4. 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}]
-함수
def f(x): return 2*x+3 def sum_all(a,b,c): return a+b+c def mul(a,b): return a*b
-조건문
if num % 2 == 0: return True else: return False
-반복문
fruits = ['사과','배','감','귤'] for fruit in fruits: print(fruit)
2. Python 패키지 설치
- requests: json파일 등 불러오기 가능
- bs4: BeautifulSoup - 크롤링 패키지
- pymongo/dnspython: mongoDB 사용 시 필수
- certifi: 보안 관련 추가설정
3. pymongo 기본 코드 및 사용 코드 요약
- 기본으로 써줘야 하는 코드, 나의 경우 certifi 관련 코드가 더 들어있다.
from pymongo import MongoClient import certifi ca = certifi.where() client = MongoClient('mongodb+srv://test:sparta@cluster0.dbsrmm8.mongodb.net/Cluster0?retryWrites=true&w=majority', tlsCAFile=ca) db = client.dbsparta MongoClient
- 자주쓰는 코드 요약
# 저장 - 예시 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'})
4. Python 크롤링
- 크롤링 코드 작성 전 기본으로 써야하는 코드
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://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers) soup = BeautifulSoup(data.text, 'html.parser') # 코딩 시작
* 크롬브라우저에서 원하는 자료값을 우클릭 > Inspect
*개발자도구 내에서 원하는 태그를 우클릭 > Copy > Copy Selector
*셀렉터를 복사하여 비교한 뒤 어디까지 가져올 지 생각해본다.
- 불러오기 코드
# 선택자를 사용하는 방법 (copy selector) soup.select('태그명') soup.select('.클래스명') soup.select('#아이디명') soup.select('상위태그명 > 하위태그명 > 하위태그명') soup.select('상위태그명.클래스명 > 하위태그명.클래스명') # 태그와 속성값으로 찾는 방법 soup.select('태그명[속성="값"]') # 한 개만 가져오고 싶은 경우 soup.select_one('위와 동일')
-크롤링 시 예외처리
# 자료값이 None인 경우 제외 for movie in movies: # movie 안에 a 가 있으면, a_tag = movie.select_one('td.title > div > a') if a_tag is not None: # a의 text를 찍어본다. print (a_tag.text) # strip() 자료값에 공백 제외 artist = music.select_one('td.info > a.artist.ellipsis').text.strip() # text[0:2] 앞에서 2글자만 끊기 rank = music.select_one('td.number').text[0:2].strip() # 자료값에 span값 제외 - strip()함수를 여러번 썼다 title = music.select_one('td.info > a.title.ellipsis').text.strip().strip('19금').strip()
5. 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') # body-content > div.newest-list > div > table > tbody > tr:nth-child(1) # body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number # body-content > div.newest-list > div > table > tbody > tr:nth-child(15) > td.info > a.artist.ellipsis # body-content > div.newest-list > div > table > tbody > tr:nth-child(15) > td.info > a.title.ellipsis musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr') for music in musics: rank = music.select_one('td.number').text[0:2].strip() title = music.select_one('td.info > a.title.ellipsis').text.strip().strip('19금').strip() artist = music.select_one('td.info > a.artist.ellipsis').text.strip() # print(rank, title, artist) # print(music.select_one('td.info > a')) # c = music.select_one('td.point') # print(b) people = [{'name':'bob','age':20},{'name':'carry','age':38}] person = {'name':'john','age':7} people.append(person) print(people)
반응형'Study > Development' 카테고리의 다른 글
[개발일지] JavaScript & JQuery 기초 수업 Level 1-1 (0) 2022.08.01 [개발일지] 웹개발 종합반 5주 (0) 2022.07.25 [개발일지] 웹개발 종합반 4주 (0) 2022.07.24 [개발일지] 웹개발 종합반 2주 (0) 2022.07.23 [개발일지] 웹개발 종합반 1주 (0) 2022.07.23