커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
hello.py에서 처음으로 mongodb 연결 시 오류
undefined주차
북마크
심*규
댓글
3
추천
0
조회수
12
조회수
12
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


hello.py에서 처음으로 mongodb 연결하는 실습할 때 에러가 발생했는데 원인을 모르겠습니다.



보고 계신 화면

스파르타 즉문즉답

전체를 캡처해 주시면, 튜터님들이 빠르게 상황을 이해할 수 있어요.




  1. 작성한 코드 (hello.py)
import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient('mongodb+srv://ckshim:sparta@cluster0.kcwkpqf.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta

# 타겟 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.naver?sel=pnt&date=20210829',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')

title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')
print(title)
print(title.text + 'aaaa')

movies = soup.select('#old_content > table > tbody > tr')
for movie in movies:
   a = movie.select_one('td.title > div > a')
   if a is not None:
      title = a.text
      rank = movie.select_one('td:nth-child(1) > img')
      star = movie.select_one('td.point')
      doc = {
         'title':title,
         'rank':rank,
         'star':star
      }
      db.movies.insert_one(doc)

#############################
# (입맛에 맞게 코딩)
#############################


에러 메시지 :

C:\Users\lordm\Documents\sparta\pythonprac\venv\Scripts\python.exe C:/Users/lordm/Documents/sparta/pythonprac/hello.py
<a href="/movie/bi/mi/basic.naver?code=186114" title="밥정">밥정</a>
밥정aaaa
Traceback (most recent call last):
  File "C:/Users/lordm/Documents/sparta/pythonprac/hello.py", line 33, in <module>
    db.movies.insert_one(doc)
  File "C:\Users\lordm\Documents\sparta\pythonprac\venv\lib\site-packages\pymongo\collection.py", line 628, in insert_one
    self._insert_one(
  File "C:\Users\lordm\Documents\sparta\pythonprac\venv\lib\site-packages\pymongo\collection.py", line 569, in _insert_one
    self.__database.client._retryable_write(acknowledged, _insert_command, session)
  File "C:\Users\lordm\Documents\sparta\pythonprac\venv\lib\site-packages\pymongo\mongo_client.py", line 1476, in _retryable_write
    return self._retry_with_session(retryable, func, s, None)
  File "C:\Users\lordm\Documents\sparta\pythonprac\venv\lib\site-packages\pymongo\mongo_client.py", line 1349, in _retry_with_session
    return self._retry_internal(retryable, func, session, bulk)
  File "C:\Users\lordm\Documents\sparta\pythonprac\venv\lib\site-packages\pymongo\_csot.py", line 105, in csot_wrapper
    return func(self, *args, **kwargs)
  File "C:\Users\lordm\Documents\sparta\pythonprac\venv\lib\site-packages\pymongo\mongo_client.py", line 1390, in _retry_internal
    return func(session, sock_info, retryable)
  File "C:\Users\lordm\Documents\sparta\pythonprac\venv\lib\site-packages\pymongo\collection.py", line 557, in _insert_command
    result = sock_info.command(
  File "C:\Users\lordm\Documents\sparta\pythonprac\venv\lib\site-packages\pymongo\pool.py", line 795, in command
    self._raise_connection_failure(error)
  File "C:\Users\lordm\Documents\sparta\pythonprac\venv\lib\site-packages\pymongo\pool.py", line 767, in command
    return command(
  File "C:\Users\lordm\Documents\sparta\pythonprac\venv\lib\site-packages\pymongo\network.py", line 127, in command
    request_id, msg, size, max_doc_size = message._op_msg(
  File "C:\Users\lordm\Documents\sparta\pythonprac\venv\lib\site-packages\pymongo\message.py", line 692, in _op_msg
    return _op_msg_uncompressed(flags, command, identifier, docs, opts)
bson.errors.InvalidDocument: cannot encode object: <img alt="01" height="13" src="https://ssl.pstatic.net/imgmovie/2007/img/common/bullet_r_r01.gif" width="14"/>, of type: <class 'bs4.element.Tag'>


종료 코드 1(으)로 완료된 프로세스




맨 마지막 부분에 원인이 있는 것 같은데요,

bson.errors.InvalidDocument: cannot encode object: <img alt="01" height="13" src="https://ssl.pstatic.net/imgmovie/2007/img/common/bullet_r_r01.gif" width="14"/>, of type: <class 'bs4.element.Tag'>

네이버 영화에서 긁어 온 url 을 인코딩할 수 없어서 에러가 발생하는 것 같은데, 해결 방법을 모르겠습니다.



취소
 공유
취소
댓글 0
댓글 알림
나의얼굴