[웹개발 종합반] 3주차 트러블슈팅

Ariul·2022년 7월 4일
0
post-thumbnail
  • 이 글은 웹개발 종합반 강의를 수강하고 공부한 내용을 정리하는 용도로 작성되었습니다.
  • 추가학습이 필요한 부분은 ❓이렇게 표시하고 학습 이후 글을 업로드 합니다.

문제 1. mongoDB 연결하기

  1. 문제 상황
    강의를 들으면서 튜터님의 설명을 따라 코드를 쳤지만 연결에 실패했다.

    from pymongo import MongoClient
    client = MongoClient('mongodb+srv://test:sparta@cluster0.내주소.mongodb.net/Cluster0?retryWrites=true&w=majority')
    db = client.dbsparta
    
    doc = {
        'name':'bob',
        'age':27
    }
    
    db.users.insert_one(doc)
  2. FAQ 문서에서 동일한 문제 상황과 해결 방법 발견했지만 여전히 연결되지 않았다.

Q. DB Atlas 사용시, pymongo.errors.ServerSelectionTimeoutError: ~ [SSL: CERTIFICATE_VERIFY_FAILED]~ 를 포함한 에러 메시지가 뜨면서 실행이 되지 않습니다.
A.

  • 사용하고 있는 인터넷 환경에 따라 보안 관련 추가 설정을 해주어야할 때가 있어요.
  • certifi 패키지를 가상환경에 먼저 설치해주세요~!
  • 아래 형광펜 칠한 코드 부분을 추가해서 사용해보세요~! 특히 client = MongoClient 부분 코드 맨 끝에 있는 tlsCAFile=ca 를 추가하는 것 잊지 마세요!
  • 아래 코드에서 내주소 를 실제 내 DB 주소로 바꾸는 것 잊지 마세요~! 😉
   from pymongo import MongoClient
   import certifi

   ca = certifi.where()

   client = MongoClient('mongodb+srv://test:sparta@cluster0.내주소.mongodb.net/내DB명?retryWrites=true&w=majority', tlsCAFile=ca)
   db = client.dbsparta

   doc = {
       'name':'bob',
       'age':27
   }

   db.users.insert_one(doc)
  1. 구글링으로도 해결하지 못했다.

  2. 원점에서 다시 시작하기 위해 Cluster0을 원래 상태인 myFirstDatabase로 바꿨더니 해결됐다!!!!!

    => 오류의 원인은 Cluster0이었던 것

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.내주소.mongodb.net/myFirstDatabase?retryWrites=true&w=majority')
db = client.dbsparta

doc = {
    'name':'bob',
    'age':27
}

db.users.insert_one(doc)

문제 2. Genie 뮤직 크롤링

  1. 문제 상황
    문제의 19금 Peaches!!!!!
  1. 문자열”19금”과 "Peaches" 사이의 공백을 없애야 한다!
    title = music.select_one('td.info > a.title.ellipsis').text.strip()
  1. 하위 태그 제거 방법 등을 고려했지만 해결하지 못했다.

  2. 문자열 추출(Slicing) text[4:}을 통해 해결!!!!!!!!!

  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) > td.number
    #body-content > div.newest-list > div > table > tbody > tr:nth-child(2) > td.number
    
    #body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis
    #body-content > div.newest-list > div > table > tbody > tr:nth-child(2) > td.info > a.title.ellipsis
    
    #body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis
    #body-content > div.newest-list > div > table > tbody > tr:nth-child(3) > td.info > a.artist.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()
        artist = music.select_one('td.info > a.artist.ellipsis').text
        title = music.select_one('td.info > a.title.ellipsis').text[4:].strip()
        print(rank,title,artist)
profile
정성과 진심을 담아 흔적을 기록하자💡

0개의 댓글