일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 실전프로젝트
- 화살표함수
- OperatingSystem
- 5주차
- 1주차
- 쿠키
- HTML
- computerscience
- react
- 알고리즘
- CSS
- 생각정리
- javaScript기초
- 4주차
- chapter2
- 항해99
- CS
- 3주차
- 자바스크립트는왜그모양일까
- 버킷리스트
- 스터디
- Todo
- 숙제
- JS
- WIL
- Til
- OS
- 완강
- javascript
- DOM
- Today
- Total
개발캡슐
2022.07.08_3주차_Python, gitbash, mongoDB- 설치 및 크롤링/스크래핑_1강~7강 본문
2022.07.08_3주차_Python, gitbash, mongoDB- 설치 및 크롤링/스크래핑_1강~7강
DevGreeny 2022. 7. 18. 19:37<목차 겸 요약>
파이썬 기초
파이썬 패키지(requests 라이브러리, beautifulsoup라이브러리)
웹크롤링, 스크래핑
웹크롤링, 스크래핑 해온 거 데이터 보여주기
3-1강.파이썬(Python) 및 gitbash설치
3주차 배울 것: Python, 크롤링, mongoDB
- 파이썬 설치, gitbash 설치할 거야. 간단해.
- 문법 익히기
- 네이버 영화를 크롤링해와서 데이터베이스에 넣고 조작까지.
=> 개인적인 질문 : 나중에 크롤링 & 스크래핑 차이 찾아보기
3-2강.연습 겸 복습 - 스파르타피디아에 OpenApi붙여보기
- file_name: index_302.html (파이참)
pythonprac/hello.py (파이썬) - 참고 스니펫 : 로딩 후 호출하기
1_복습
1. OpenApi 붙여보기
2.로딩 후 호출하기(로딩하자마자 호출하기)
- 형태
$(document).ready(function(){ });
- 로딩 후 호출하기 - 코드 스니펫
<script>
$(document).ready(function(){
listing();
});
function listing() {
console.log('화면 로딩 후 잘 실행되었습니다');
}
</script>
- '로드가 다 되면 실행되는 함수'를 하나 정의해서 만들어.
<script>
function listing() {
console.log('화면 로딩 후 잘 실행되었습니다');
}
</script>
=>listing() 함수 정의 해놓은 것 : console.log('화면 로딩 후 잘 실행되었습니다.')라고 console.log로 콘솔창에 값을 띄우기를 할 listing()이란 함수야~
- 로딩 후 바로 정의해놓은 listing() 함수 호출해!
<script>
$(document).ready(function () {
listing();
});
</script>
=> 결과물 : 잘 되서 로그가 뜸.
3-3강. 파이썬 시작하기
- sparta 폴더 => pythonprac 폴더 만들고 시작할거야.
- 파이참에서 파이썬 시작 - pythonprac폴더에 프로젝트를 만들거야
- 1: [파일] - [새 프로젝트] -
- 2: 저장할 파일 위치(location) 선택 - sparta/pythonprac
- 3: 위치 - pythonprac에 /venv폴더 유무, 기본 인터프리터 : python38(pythono3.8) 확인
- 4: '웰컴 스크립트 생성' 체크해제
- 5: Create(생성) -> this window(이 창에서)
- 실행 후, 상단 왼쪽아래에 프로젝트를 클릭 시, [pythonprac]안에
[venv]라는 폴더가 보이지만 안 보이는 애다 생각하고 신경을 아예 안 쓰면 된다. 건들면 x
=> 참고
- pythonprac - 새로만들기 - python파일 - file_name: hello - hello.py 파일 생성됨.
print('hello sparta!!');
- 파이썬(python) 문법은 javascript보다 더 직관적이야.
- 왜 더 직관적인지 다음 강에서 보여주지...뜨든
3-4강. 파이썬 기초공부
- file_name: hello.py (파이썬)
- 변수, 자료형, 함수, 조건문, 반복문
1_변수
- 예제1)
a = 2
b = 3
print(a+b)
#실행 후
#5
#이렇게 5를 찍어주는게 print
- 예제2)
a = 'haerhee'
b = 'nam'
print(a+b)
#실행 후
#haerheenam
2_자료형 : 리스트(list) 형식, 딕셔너리(dictionary)형식
1. 리스트
- 예제1)
a_list = ['사과','배','감']
print(a_list[1])
#실행 후
#배
#print(a_list[2])
#실행 후
#감
- 예제2)
a_list = ['사과','배','감']
a_list.append('수박')
print(a_list)
#실행 후
#['사과','배','감','수박']
2.딕셔너리
- 예제)
a_dict = {
'name':'bob',
'age':27
}
print(a_dict['name'])
#실행(오른쪽 키 통해)후
#bob
3_함수
- 예제1) 사칙연산
def sum(a,b): #:를 쓰고 바로 return a+b 를 쓰는 이유는 파이썬은 직관적이라 어차피 줄을
return a+b #맞춰서 쓸 건데 왜 중괄호 같은 걸 쓰니, 그냥 줄을 맞추자.
result = sum(1,2) # sum(1,2)값이 result에 들어가고 3이 찍힌다.
print(result)
#실행 후
#3
-
- def : definition의 약자
- return : 나를 변신시켜라. 함수에서 값을 반환하기 위해 써.
- => return a+b => a+b로 나를 변신시켜(반환해)라는 의미.
- 예제2) 만약 print('더하자!') 라고 쓰면 어떻게 될까.
def sum(a,b):
print('더하자!') #더하자가 먼저 찍히고
return a+b #3으로 나를 변신시키자
result = sum(1,2) #sum(1,2) 는 3이 되고 result에 3이 들어갈 거고
print(result)
#실행후
#3 이 찍힌다.
4_조건문
- 예제)
def is_adult(age): //def is_adult는 age를 받는다.
if age > 20 //이렇게 tab을 한 게 나(윗 글)의 내용물입니다.
print('성인입니다') //이렇게 tab을 한 게 나(윗 글)의 내용물입니다.
else:
print('청소년입니다')
#is_adult(15)
#실행후
#청소년입니다
#is_adult(25)
#실행후
#성인입니다
=> 파이썬에선 들여쓰기가 중요해.
5_반복문
1.리스트
- 예제1
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
for fruit in fruits:
print(fruit)
#실행 후
#사과
#배
#배
#감
#수박
#귤
#딸기
#사과
#배
#수박
=> 자바스크립트는 어차피 반복문 다 리스트랑 같이 써. ex) rows
=> 파이썬은 리스트와 함께 쓰도록 기획되어있어.
=> 리스트의 요소들을 하나씩 꺼내서 내용물로 써.
- 예제2
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
count = 0 #count가 0부터 시작해.
for aaa in fruits:
if aaa == '사과' : #aaa가 만약에 사과라면
count +=1 #count를 하나 늘려줘. for문은 여기까지가 내용끝.
#그리고 다 돌고나면
print(count)
#실행후
#2
2.딕셔너리
- 예제)
people = [{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27}]
for person in people: //보통 단수 복수 이렇게 쓴다. 이름 쓸 때.
print(person)
#실행후
#
#{'name': 'bob', 'age': 20}
#{'name': 'carry', 'age': 38}
#{'name': 'john', 'age': 7}
#{'name': 'smith', 'age': 17}
#{'name': 'ben', 'age': 27}
4_파이썬이 자바스크립트와 가장 다른 부분
- 예제)
people = [{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27}]
for ppp in people: //people하나씩 꺼내서 쓰겠다
if ppp['age'] > 28 //ppp의 age가 28보다 크다면
print(ppp['name']) // ppp의 name을 출력해라.
#실행후
#carry
#ben
=> 전형적인 형태야.
3-5강. 파이썬 패키지 설치
- file_name: dbprac/hello.py (파이썬)
- 크롤링을 하려면 남들이 만들어 놓은 라이브러리를 써야하는데 이를 패키지라고 함.
패키지 설치 = 외부 라이브러리 설치
1_가상환경(virtual environment ) - 프로젝트별로 패키지들을 담을 공구함
- 1:00 분 시간대 강의
- 라이브러리를 모아두는 곳.
- 줄여서 venv
2_venv 폴더. = 라이브러리 공구함.
- 패키지 설치
- requests - 패키지 설치
=> ajax 역할을 하는 패키지.
3-6강. 패키지 사용
- file_name : hello.py
- requests 패키지 사용
requests 라이브러리 쓰는 법
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
print(rjson)
#실행후
#get한 주소의 내용(rows)들이 보여짐
- rjson => 로 요리할거야
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
rows = rjson['RealtimeCityAir']['row']
print(rows)
#실행후
#RealtimeCityAir의 row가 보여짐.
=> RealtimeCityAir의 row들
- 확인해본 row를 돌려보자(for~ in~:)
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
rows = rjson['RealtimeCityAir']['row']
for row in rows:
print(row)
=> 실행후 파이썬 결과창: 뭉쳐있던 row를 한 줄씩 뺴서 보여줌.
- 구이름과 미세먼지 수치들이 쭉쭉쭉 결과창에 나와.
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
rows = rjson['RealtimeCityAir']['row']
for row in rows:
gu_name = row['MSRSTE_NM']
gu_mise = row['IDEX_MVL']#여기까진
print(gu_name, gu_mise)
- gu_mise의 수치가 60보다 작은 gu_name들 찍어주는 걸로.
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
rows = rjson['RealtimeCityAir']['row']
for row in rows:
gu_name = row['MSRSTE_NM']
gu_mise = row['IDEX_MVL']#여기까진
if gu_mise < 60:
print(gu_name)
3-7강. 웹스크래핑(크롤링)기초
- 2022.07.11 ~ 2022.07.13
- file_name: hello.py
- 참고스니펫 - 네이버 영화 코드스니펫
- beautifulsoup 패키지 - 쉽게 홈페이지 html의 세부 내용 예쁘게 찾개 해주는 패키지
- beautifulsoup 패키지 설치
- ctrl + alt + s(setting) 설정 -> 프로젝트 -> python 인터프리터 -> "+"모양(패키지)
-> 'bs4' 검색 - bs4(beautifulsoup) 패키지 설치
- ctrl + alt + s(setting) 설정 -> 프로젝트 -> python 인터프리터 -> "+"모양(패키지)
- 크롤링 기본 세팅 구조
import requests
from bs4 import BeautifulSoup
# 타겟 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')
#############################
# (입맛에 맞게 코딩)
#############################
1. ''크롤링 기본 세팅'' 코드스니펫 이용
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.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
print(soup)
=> print(soup)을 쓰고 실행 후, 해당 네이버 영화의 html이 실행창에 들어와서 뜨는 걸 볼 수 있음
- header => 코드에서 콜을 날려, 근데 마치 브라우져에서 콜을 날리는 것 처럼 사람인 것처럼.
#data = requests.get()의 끝에 header = headers 라고 쓰인다(위 코딩 참고)
2. beautifulsoup을 사용하는 방법 (파이썬 문법이 아님)
- 네이버 영화 코드스니펫홈페이지 → 영화랭킹 → 랭킹 → 평점순(모든영화) → 1순위 영화의 마우스 오른쪽 클릭 '검사' → 그 제목 라인 태그에 오른쪽 마우스 클릭 → copy - > copy selector
- 이후,
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.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
title = soup.select_one(#old_content > table > tbody > tr:nth-child(2) > td.title > div > a) #_one인 이유는 일단 하나만 할 거니까.
print(title)
#실행결과창
#밥정
=> title = soup.select_one() 적어주고 괄호 안에 copy selector 값을 붙여준다. 괄호 안의 내용이 그 내용.
=> 실행결과창에 밥정의 태그라인이 보여진다. (아래 이미지)
- print(title) -> print(title.text) - title에 .text를 적으면 실행결과창에 '밥정'이 뜸
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.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
title = soup.select_one(#old_content > table > tbody > tr:nth-child(2) > td.title > div > a) #_one인 이유는 일단 하나만 할 거니까.
print(title.text)
#실행후
=> 결과 : '밥정'
- 다시 원점에서, print(title) 상태에서.
<a href="/movie/bi/mi/basic.naver?code=186114" title="밥정">밥정</a>
- 실행 후, 이 부분에서 태그의 속성인 href="주소" 을 찾고싶다면
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
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.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a
movies = soup.select('#old_content > table > tbody > tr')
print(title['href'])
=> 결과: href 의 내용인 /movie/bi/mi/basic.naver?code=186114 만 뜸.
=> 이 경우는, select_one 일 때.
- select_one . 하나만이 아닌 여러 개일 때
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
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.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
print(soup)
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a
movies = soup.select('#old_content > table > tbody > tr')
print(movies)
=> 결과창: <tr>..</tr> 이게 나옴.
- a태그 값들
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
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.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a
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:
print(a)
- a태그 값의 제목(text)들
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
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.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a
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:
print(a.text)
=> is not None??? => ==$0 => 이 부분 구글링 & 질문
=> movies => tr의 "전체"
=> movie는 tr의 전체 중 일부
=> 결과 : 제목들 뜨든
'스파르타코딩클럽-항해99_9기 > 3주차_Python, mongoDB, Flask, 크롤링, 스크랩핑' 카테고리의 다른 글
20220811 (0) | 2022.08.11 |
---|---|
2022.07.08~13_3주차_Python, gitbash, mongoDB- 설치 및 크롤링/스크래핑_8강~15강 (0) | 2022.07.18 |