파이썬
굉장히 각광받는 언어
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]이용해야 한다는걸 답 보고 알아버림..
다음번엔 더 고민하기!
'✍2021,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 |