brunch

매거진 개발일지

You can make anything
by writing

C.S.Lewis

by yurikim Nov 17. 2022

웹개발종합반 개발일지 3주차-2

파이썬 토할 것 같아요.

1. 수강목적 : 코알못탈출 웹디자인에 필요한 기본지식 습득

2. 배운점 : 


데이터 읽기 / 업로드하기 / 다시 가져오기



과제수행을 위한 패키지 설치 (플러그인같은건가?)

requests / beautifulsoup

웹사이트에서 노출되어있는 데이터를 긁어올때 쓰는 패키지


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

data = soup.select('#####')

핳 토할것같아.........암턴 저렇게 복붙해두면 requests.get 에 있는 url의 데이터를 솎아보기 할 수 있음.

soup.select(안에다가 copy selector 해서 영역을 가져올 수 있음) 물론 데이터를 확인하려면 print(data)를 하면됨.


print(data).text 하면 data의 text만 보이나? 해봐야딩... 안됨 ㅠㅋㅋㅋ

print(data.text) 이래해야됨



for rank in ranks:
    doc = rank.select_one('td.number').text[0:2]
    print(doc)


text[0:2]는 두자리 문자만 잘라서 표기. html td.number 태그 안에 넘 많은 정보가 나열되어있어서 순위만 볼 수 있게 두자리를 나눠서 씀.


strip() 은 그 안에 들어간 문자를 잘라내는데, () 안을 비워두면 공백이 잘려나감. 

rstrip()은 오른쪽에서부터 자르고, lstrip()은 왼쪽에서 부터 자름.



진심 이거 하나 추가하면서도, 코딩은 오타와의 전쟁이다. 똑같이 했는데 한줄 쓸때마다 오류발생해서 멘붕나서 보면 strip인데 앞에 .안붙였다거나 stip() 이렇게 복붙안하고 직접쓰다가 빼먹고 아까도 select_one 인데 오류나서 보니까 selet_one이라고..... 빨간글씨탈트 올것 같음.


물론 어디가 틀렸는지 설명은 해준다만...





암튼 같은 방법으로 랭킹, 곡명, 아티스트 정보를 따와서 이름을 붙이고 텍스트를 추려서 프린트 하면 과제 끝.


문자를 중간에 추가해서 보기 좋게 정렬하였다~



파이썬 무서운게 탭 하나의 있고없고에 따라 결과값이 다르게 호출된다. 괄호개념 대신에 편하게 쓰는거라 그렇다지만 좀... 머리가 아프다.



for rank in ranks:
    ranking = rank.select_one('td.number').text[0:2].strip()
    title = rank.select_one('td.info > a.title.ellipsis').text.strip()
    artist = rank.select_one('td.info > a.artist.ellipsis').text

    print(ranking,'|',title,'-',artist)

이렇게 쓰면 for 구문안에 print가 있기 땜에 for가 반복하는동안 print 가 계속 되지만


for rank in ranks:
    ranking = rank.select_one('td.number').text[0:2].strip()
    title = rank.select_one('td.info > a.title.ellipsis').text.strip()
    artist = rank.select_one('td.info > a.artist.ellipsis').text

print(ranking,'|',title,'-',artist)

요렇게 탭이 없다는 이유로 결과값이 하나만 노출된다. ^_ ㅜ.... 그럼... 이걸 바탕으로 원하는 조건에 맞는 랭킹만 가져오기를 할 수 있을까?


갓진스 어텐션이 5위니께 이걸 찾아보겠음.


ㅎ... 크롤링 된 것중에서 td.number가 5인걸 찾는게...있을것 같은데...

 너무 어려워보여서...몽고db에 일단 배운대로 업로드함.


몽고db 설정하는것도 좀 어려움이 있었는데, 컴퓨터 보안수준에 따라 추가적인 코드가 필요했다.




패키지설치 pymongo



---

from pymongo import MongoClient
import certifi
ca = certifi.where()

client = MongoClient('mongodb+srv://<아이디자리>:<패스워드자리>@cluster0.gctjvhr.mongodb.net/cluster0?retryWrites=true&w=majority', tlsCAFile = ca)
db = client.dbsparta


---




doc = {
    'title' : title,
    'ranking' : ranking,
    'artist' : artist
}
db.genie.insert_one(doc)

doc만들어서 이름붙여주고 insert_one해서 genie에 데이터를 올려줌



이제 갓진스 어텐션을 몽고디비에서 가져와보겠음.

연습하면서 insert_one 안지워서...

데이터 700개됨....




암튼 700개 속에서 갓진스를 찾아냄


ㅋㅋ저 코드에도 insert_one살아있어서 계속 지니에서 받아다 몽고디비로 올리고있었다는거... 어쩐지 느리다했음 ^^.....중복된 데이터 지우는 방법은 뭘까요....??



유갓미루킹포어텐셔어어어언~~~~ 넘 힘든 3강이었다!!!!js의 구동원리를 깨우치자마자 바로 다른언어가 나와서,,, 진심 파이썬 1도 모르겠음..



3. 보완할점

**오타주의** 검색많이해보기...ㅠㅠㅠ 손목 아껴쓰기... 그냥 강의듣는용도로 마우스없이 트랙패드로 쓰는데 데... 타이핑으로 코딩할 시간이 없고 계속 검색만 하고 복붙만 하니까 손목 너무아픔


4. 앞으로의 계획

완강



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari