웹 개발 종합반 3주차 스터디를 진행했다.
금요일에 더워서 창문을 열었다가 까먹고 안닫고 자서 감기에 걸렸다.
주말 내내 아파서 이틀을 통째로 날렸다.
진짜 밥먹고 약먹고 자고를 반복하는 주말이었다..
그렇게 1일 1강의를 주말 내내 못했다.
그래도 스터디는 해야겠다싶어서 타이레놀 두 알과 판피린 두 병으로 그나마 괜찮아진 상태에서 참여했다.
3주차 내용을 4일전, 목요일에 듣고 복습을 못해서 기억 저 구석으로 보내버린 줄 알았는데,
유리님과 근보님 발표를 들으면서 잘 떠올릴 수 있었다.
오늘 스터디 문제는 네이버 게임 순위를 크롤링해서 그걸 데이터베이스에 저장하는 것이었다.
네이버 게임 순위 창에서 순위와 게임 이름, 장르를 각각 copy selector해서 코드를 작성하면 첫번째 단계는 성공이다.
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://search.naver.com/search.naver?where=nexearch&sm=tab_etc&mra=bkJB&pkid=3001&qvt=0&query=%EB%84%A4%EC%9D%B4%EB%B2%84%EA%B2%8C%EC%9E%84%EB%9E%AD%ED%82%B9',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#mflick > div > div > div:nth-child(1) > div')
for div in trs:
a = div.select_one('strong > a').text.strip()
rank = div.select_one('div.area_ranking > span > strong').text[2:3]
b = div.select_one('dl > dd:nth-child(2)').text
print(rank,a,b)
이렇게 코드를 쓰면
이렇게 나온다.
그런데, 처음에 코드를 썼을때는
순위1
순위2
순위3
...
이런식으로 숫자 앞에 순위가 나왔다.
그래서 앞에 순위를 지울 수 없나 하고 의문이 나와서 스터디원 분들이 고민에 빠졌다.
강의를 들을 때 숙제에서 .text[0:2]를 썼던 기억이 나서 써봤는데,
'순위'만 나왔다.
그래서 막 써보다가 [2]를 썼는데 '순위'가 사라지고 숫자만 나왔다.
'[:]'를 어떻게 쓰는 것인지 원리를 모르겠어서 한참동안 찾아보다가 유리님이 찾아주셔서 알게되었다.
[0:2]는 0이상 2미만의 인덱스를 가져오는 것이다.
그래서 숫자만 쓰려면 [2:3]을 써야하는 것이다.
자세한 것은 (https://dojang.io/mod/page/view.php?id=2208)에서 찾아보자.
그리고 DB에 저장했는데,
from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.x2ustyq.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta
pymongo 기본 코드와
doc = {'a':a,
'rank': rank,
'b':b}
db.trs.insert_one(doc)
저장하는 코드를 써서
from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.x2ustyq.mongodb.net/?retryWrites=true&w=majority')
db = client.dbsparta
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://search.naver.com/search.naver?where=nexearch&sm=tab_etc&mra=bkJB&pkid=3001&qvt=0&query=%EB%84%A4%EC%9D%B4%EB%B2%84%EA%B2%8C%EC%9E%84%EB%9E%AD%ED%82%B9',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#mflick > div > div > div:nth-child(1) > div')
for div in trs:
a = div.select_one('strong > a').text.strip()
rank = div.select_one('div.area_ranking > span > strong').text[0:2]
b = div.select_one('dl > dd:nth-child(2)').text
doc = {'a':a,
'rank': rank,
'b':b}
db.trs.insert_one(doc)
이렇게 DB에 저장해 보았다.