카테고리 없음

스파르타 웹종 정리 크롤링 / mongoDB 오류 [SSL: CERTIFICATE_VERIFY_FAILED] / 인터프리터 어딧어!!

GABOJOK 2023. 6. 5. 16:25

크롤링 

웹페이지에서 어떤 정보들을 가지고 온다는 이야기.

 

크롤링을 위한 준비. 

python 라이브러리를 담을 폴더 생성

1. 파이썬 인터프리터 선택. 우측 맨 하단 파이썬 버전 선택 누르고 추천 표시로 

2. 터미널 창에 입력 python3 -m venv venv

3. 새터미널 실행 하면 터미널에 (venv)가 적힌채로 나옴. 

이게 무슨말이냐면 라이브러리를 venv 폴더에다 깔꺼야 라는 말. 

4. requests 설치  .   터미널에 이렇게 입력 pip install requests

(여기서 잠깐!! requests 가 뭔데?? 

 우리 fetch에서 썻던 기능과 비슷해 .  데이터를 가져와서 그럴 이용해서 뭔가 할 수 있지

 

를 한 후에

 

pip install bs4 라고 터미널에 입력후 설치하기.

 

 

크롤링으로 가져온 정보들 중 원하는 요소만 골라서 써보기.

아래와 같은 코드가 있다. 

 

import requests

from bs4 import BeautifulSoup

 

URL = "https://movie.daum.net/ranking/reservation"

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(URL, headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

 

title = soup.select_one('selector복사 한 내용 붙여넣기')

 

이처럼 크롤링으로 어떤 데이터들을 가져오면, 간단하게 링크만 걸어서 가져올 수 있는데,

여기서 내가 원하는 데이터만 골라오려면 일단 변수를 설정하고 거기에 넣어준다. 

여기서 select_one 의 의미는, 그중 하나만 가져올꺼야. 라는 말. 

만약 여러개 가져오려면 그냥  select 라고 적으면 된다. 

 

변수 = 가져올변수.select_one(' selector복사 한 내용 붙여넣기 ')

 

 

 

이걸 출력해서 보고싶을때 당연히 print(변수명) 하면 되지만,

만약 내가 글자만 보고싶다면, 

print(변수명.text)

 

 

 

크롤링으로 가져온 데이터들 파이썬에서 반복문 돌리기.

아래 코드를 보자. 

 

import requests

from bs4 import BeautifulSoup

 

URL = "https://movie.daum.net/ranking/reservation"

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(URL, headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

 

lis = soup.select('#mainContent > div > div.box_ranking > ol > li')

 

for li in lis:

    title = li.select_one('.link_txt')

    print(title.text)

 

 

아까  크롤링해서 가져온 데이터들 중 원하는 데이터들만 변수에 넣어줫는데,

거기서 특정한것만 반복해서 보이고 싶다면

일단 반복문을 만든다. 

for 반복문 이름 in 가져올 변수 이름 :

     새로운 변수이름 = 반복문 이름.select_one('.가져오려고 하는 데이터의 클래스 이름')

 

 

.strip( )

앞뒤로 붙은 띄어쓰기들을 다 없애준다. 

 

.replace(',' , ' ' )

특정 문자를 없앨 수 있다. 

 

 

mongoDB 에 데이터 올려두기.

강의대로 데이터를 업로드를 하려고 하는데,,, 오류가 나버렷다.

내일 정규과정 전 시험이라 맘은 급한데 계속 삽질만 하다가 드디어 해결.

 

나의 오류 메세지는 아래와 같다.

블라블라 겁나김 블라블라 ~~~ 마지막에

 [SSL: CERTIFICATE_VERIFY_FAILED]

 

나의 해결 방법은 아래와 같다. 

1. pip install certifi 추가로 설치

2. 코드에 import certifi 

ca = certifi.where()    이거 두줄 추가. 

3. 주소 넣는 괄호에, 그렇지만 '가 끝난후    ,tlsCAFile=ca  추가 입력.

4. 실행. 드뎌 두둥 되엇다😂😂😂😂

 

진짜 지옥과 천국을 오가는 기분... ㅎㅎ

아래는 전체 코드이다. 

 

from pymongo import MongoClient

import certifi

 

ca = certifi.where()

 

client = MongoClient('mongodb+srv://sparta:test@cluster0.pqqngbq.mongodb.net/?retryWrites=true&w=majority', tlsCAFile=ca)

db = client.dbsparta 

 

doc = {

    'name': '히지',

    'age':22

}

db.users.insert_one(doc)

 

 

 

인터프리터 설정시 vscode 아래에 숫자가 갑자기 안보인다>????!!!

 

1. F1 키 누른다.

2. python : Select interpreter 을 검색해서 클릭

3. 사용하고자 하는 인터프리터 검색 및 클릭. 

 

 

 

mongoDB에서 데이터 가져오기

여러개 가져오게 하는 것

 

all_users = list(db.users.find({},{'_id':False}))

 

리스트니까 반복문까지 붙여서 하면 더 굿이겟당.

for a in all_users :

    print(a['name'])

 

변수이름 설정 = list(db. db에서 가져올 위치 파일의 이름 .find({},{'_id':False})

회색글씨 한거는 블라블라 나오는거 안보이게 하는것.

 

 

이건 하나만 가져오게 하는것.

user = db.users.find_one({})

 

 


# 바꾸기 - 예시
db.users.update_one({'name':'영희'},{'$set':{'age':19}})

그럼 영희의 나이가 19로 바뀐다. 

# 지우기 - 예시
db.users.delete_one({'name':'철수'})

그럼 철수의 데이터가 사라지면서, 철수이름, 철수 나이가 다 사라짐.