-
3일차- 내일배움캠프 1기 TIL(Today I learned)_파이썬/웹스크레핑/MongoDB개발일지(TIL) 2021. 9. 16. 10:16
월, 화, 수 3일 안에
강의 완강이 목표인 이유로 2일간 수면부족+피곤함과 싸웠다.
같은 이유로 개발 일지를 2일이나 밀려서 밀린 2일 치를 적어본다.
1. 설치한 것
-파이썬, 몽고디비, Robo3T
2.복습한 것 $.Ajax
-
HTML로 쏘는 값들이 중복으로 계속 입력되서,
추가로 입력되는 중복값을 없애는 기능을 구현했다.
ajax 메서드 중에, . .ready()는 DOM tree가 생성된 이후에 실행되는 메서드이다.
```jsx <script> $(document).ready(function () { $('#cards-box').empty(''); listing(); }); function listing() { $.ajax({ type: "GET", url: "http://spartacodingclub.shop/post", data: {}, success: function (response) { let articles = response['articles']; for (let i = 0; i < articles.length; i++) { let article = articles[i]; let image = article["image"]; let url = article["url"]; let title = article["title"]; let desc = article["desc"]; let comment = article["comment"]; let temp_html = `<div class="card"> <img class="card-img-top" src="${image}" alt="Card image cap"> <div class="card-body"> <a href="${url}" target="_blank" class="card-title">${title}</a> <p class="card-text">${desc}</p> <p class="card-text comment">${comment}</p> </div> </div>`; $('#cards-box').append(temp_html); } } }) } function openclose() { // id 값 post-box의 display 값이 block 이면 if ($('#post-box').css('display') == 'block') { // post-box를 가리고 $('#post-box').hide(); $('#btn-posting-box').text('포스팅 박스 열기'); } else { // 아니면 post-box를 펴라 $('#post-box').show(); $('#btn-posting-box').text('포스팅 박스 닫기'); } } </script> ```
3.파이썬
-기본 문법(변수, 조건문, 반복문, 함수, 데이터타입)
-사용 패키지 : requests, bs4 pymongo
-웹스크래핑 : requests/bs4를 사용 + 크롬 개발자 도구에서 사용하고 싶은 html요소 copy selector로 가져오기
#기본 세팅! import requests from bs4 import BeautifulSoup # 타겟 URL을 읽어서 HTML를 받아오고, 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.nhn?sel=pnt&date=20200303',headers=headers) # HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦 # soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨 # 이제 코딩을 통해 필요한 부분을 추출하면 된다. soup = BeautifulSoup(data.text, 'html.parser')
select, select_one으로 원하는 Data 가져오기!
# 선택자를 사용하는 방법 (copy selector) soup.select('태그명') soup.select('.클래스명') soup.select('#아이디명') soup.select('상위태그명 > 하위태그명 > 하위태그명') soup.select('상위태그명.클래스명 > 하위태그명.클래스명') # 태그와 속성값으로 찾는 방법 soup.select('태그명[속성="값"]') # 한 개만 가져오고 싶은 경우 soup.select_one('위와 동일')
- 실습으로 네이버 인기영화 데이터를 스크랩핑 했다.
- 필요하지 않은 데이터들도 같이 스크랩되는 이유로 고민하고 씨름했다.
**** 공백 없애기 .strip()
**** 필요없는 문자 없애기 .strip('필요없는 문자')
회고: 아직도 이해할 수 없지만 .strip으로 원하는 데이터 하위에 있는 <span>테그를 지웠더니
목표데이터가 망가지는 현상이 있었다...(아직도 모르겠다..) 다행히 같이 공부하는 팀원이 해결책을 주었는데,
String[0: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('https://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers) soup = BeautifulSoup(data.text, 'html.parser') trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr') for tr in trs: title = tr.select_one('td.info > a.title.ellipsis').text.strip() rank = tr.select_one('td.number').text[0:2].strip() artist = tr.select_one('td.info > a.artist.ellipsis').text print(rank, title, artist)
4.몽고디비 CRUD 구현
-여러개 찾을때 list()처리를 해주지 않아서, 장시간 오류와 씨름했다,,
-DB에서 받아온 데이터를 반복문으로 Array[i]['key'] 형태로 써야하기 때문에 잊지말고 사용해 주자.
#기본 세팅 from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbsparta # 코딩 시작 # C insert / R find / U update / D delete # 저장 - 예시 doc = {'name':'bobby','age':21} db.users.insert_one(doc) # 한 개 찾기 - 예시 user = db.users.find_one({'name':'bobby'}) # 여러개 찾기 - 예시 ( _id 값은 제외하고 출력) same_ages = list(db.users.find({'age':21},{'_id':False})) # 바꾸기 - 예시 db.users.update_one({'name':'bobby'},{'$set':{'age':19}}) # 지우기 - 예시 db.users.delete_one({'name':'bobby'})
반응형'개발일지(TIL)' 카테고리의 다른 글
6일차- 내일배움캠프 1기 TIL(Today I learned)_팀 프로젝트/복습 (0) 2021.09.23 4일차- 내일배움캠프 1기 TIL(Today I learned)_GIT, Github (0) 2021.09.18 2일차- 내일배움캠프 1기 TIL(Today I learned)_jquery/ajax (0) 2021.09.14 1일차- 내일배움캠프 1기 TIL(Today I learned)_HTML/CSS/JS/부트스트랩 (0) 2021.09.13 0주차 - 웹 프로그래밍 A-Z 기초 Training 1회차 (0) 2021.09.13