촬리의늘솔길

3주차 필기/개발일지 본문

✍~2022/WEB

3주차 필기/개발일지

리촬리 2021. 6. 20. 03:49

파이썬

굉장히 각광받는 언어

 

venv파일

정리하자면,

**가상환경(virtual environment)**은 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경 입니다.

출처 : 파이썬 공식 용어집- 가상환경

 

python requests 패키지 치면 많이나옴

 

웹 크롤링

기본세팅

 

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://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

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

# 코딩 시작

 

컴퓨터가 솎아서 받아오는거 = 크롤링

코드단에서 브라우저 키지않고 요청 (request)

html중에 내가 원하는걸 잘 솎아내는거(bs4)

 

header는 브라우저에서 엔터친것처럼 효과 내준것

그 다음에 url에서 요청 받아오면

bs4로 찍어줌 html을

 

태그의 텍스트 가져오기- .text하기

print(title.text)

속성 가져오기 꺽쇠로 가져오기

print(title['href'])

 

(크롤링 실습)

tr이 한줄

select_one은 하나의 a태그

select는 모든 a태그

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://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

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


trs = soup.select('#old_content > table > tbody > tr ')

for tr in trs:
    a_tag = tr.select_one('td.title > div > a')

    if a_tag is not None:
        rank = tr.select_one('td:nth-child(1) > img')['alt']
        star = tr.select_one('td.point').text
        title = a_tag.text
        print(rank, title, star)

약간 잠결에 듣는중이라 몽롱하다..

 

DB

1. http://localhost:27017/ 을 크롬에 쳐서 확인 => 몽고 db는 돌아가고있는데, 크롬에 치면 안된다 라는 문구 뜸

2. robo3T

mongoDB는 데이터베이스, 평소에 쓰는 프로그램들은 눈에 보이는데 몽고는 내 눈에 보이지않게 켜짐

robo3T를 가지고 이 몽고디비의 데이터를 우리눈으로 볼 수 있게함.

 

- DB의 역할과 종류

  • 데이터베이스 :  데이터를 잘 가져다가 쓰기 위해서 사용함. 책장같은 것,                                                

종류:       

  • SQL : 열과 행을 미리 정해놓아야 함. 중간에 바꾸기 불편함, but 정형화된 데이터를 뽑아가는 방식은 최적화가 많이 되어있음. 데이터가 일관적이고, 분석하기가 굉장히 빠름 (MS-SQL, My-SQL)
  • NOSQL : 딕셔너리 형태로 들어가는것 데이터 하나하나 다 다르다. 유연함. (MongoDB)

서버라는 것은 컴퓨터의 역할

컴퓨터에서 서버라는 프로그램을 돌리자

내 컴퓨터에서 DB라는 프로그램을 돌리자

프로그램 켜서 쓰듯이 DB도 프로그램중에 하나인것

DB가 프로그램이자 역할이다. 

여러가지 역할을 만들 수 있음 하나의 컴퓨터가 (DB, 서버, 크롤링)

 

아 SQL이 데이터베이스였구나..

 

 

- Pymongo로 DB조작하기

1. pymongo패키지 pycharm에 설치 (file -> setting -> pythoninterpreter-> + -> 검색->설치->확인)

2. pymongo기본 세팅

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

# 코딩 시작
필기
#insert (데이터 입력) find (찾는거) update , delete

#insert
doc = {'name':'Jane','age':25}
db.users.insert_one(doc) #몽고 DB가 아무리 자유롭게 쌓는다고 하더라도, 콜렉션이라는 개념(비슷한 애들끼리 묶음)
#users = 콜렉션

#find
same_ages = list(db.users.find({'age':21},{'_id':False}))#id는 자동으로생성되는 유니크 값인데 항상 false써주면 깔끔한 정보ㅇㅇ
#조건없이 -> {}빈 중괄호
for person in same_ages:
   print(person)

user = db.users.find_one({'name':'bobby'},{'_id':False}) #bobby만 가져와라
print(user['age'])
db.users.update_one({'name':'bobby'},{'$set':{'age':19}}) #name이 바비인애를 age를 19로 바ㄱ꿔라
update_many => 네임이 bobby인애 모두 찾아서 age를 19로 바꿔라 (굉장히 위험한거라서 잘 안씀)

db.users.delete_one({'name':'bobby'})

------------------------------------------------------------------------------------------------
코드 요약
# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
same_ages = list(db.users.find({'age':21},{'_id':False}))

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

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

 

 


오늘자 숙제

지니뮤직 크롤링하기

import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017) #mongoDB에 접속
db = client.dbsparta

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=D&ymd=20200403&hh=23&rtm=N&pg=1',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(1) > td.info > a.title.ellipsis
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis
genie = soup.select('#body-content > div.newest-list > div > table > tbody > tr ')
for i in genie:
    a_tag = i.select_one('td.info > a.title.ellipsis')

    if a_tag is not None:
        rank = i.select_one('td.number').text[0:2].strip()
        singer = i.select_one('td.info > a.artist.ellipsis').text.strip()
        title = a_tag.text.strip()
        doc ={
            'rank':rank,
            'title':title,
            'singer':singer
        }
        print(rank,title,singer)

1. 기본 구조 복붙

2. 지니뮤직 -> 검사 ->  코드 -> 우클릭 -> copy -> copy selector 를 이용해서 구조알기

ex: #body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis

3. 배운대로 이용해서 하기

4. 파이썬 strip() 이용해서 필요없는 공백줄이기

 

어려웠던점 : rank할때 

자꾸 상승, 하강이 text인식해서 출력됨

[0:2]이용해야 한다는걸 답 보고 알아버림..

다음번엔 더 고민하기!

728x90

'✍~2022 > WEB' 카테고리의 다른 글

5주차 필기/개발일지  (0) 2021.07.01
4주차 개발/필기일지  (0) 2021.07.01
2주차 필기/ 개발일지  (0) 2021.06.18
1주차 필기/개발일지  (0) 2021.06.14
개발일지 프롤로그  (0) 2021.05.24