🔖05. 파이썬 패키지 설치하기
🔎 가상 환경(virtual environment) 이란?
라이브러리를 모아둔 곳
[Setting]-[Project: pythonprac]-[Python Interpreter]-[+]-[requests]-[install package]
일종의 ajax 같은 개념!
🔖06. 패키지 사용해보기
🔎 데이터 가져오기
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
print(rjson)
🔖07.웹스크래핑(크롤링) 기초
🔎 네이버 영화 페이지
https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829
랭킹 : 네이버 영화
영화, 영화인, 예매, 박스오피스 랭킹 정보 제공
movie.naver.com
🔎 bs4(beautifulsoup4) 패키지 설치
값을 찾기 쉽게 도와주는 패키지
🔎 html 가져오기
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)
🔎 HTML 추출하기
영화 페이지에서 영화제목란 마우스 커서 우클릭 [검사]
mark된 Elements 마우스커서 우클릭 [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')
print(title)
print(title.text)
print(title['href'])
👀 출력
<a href="/movie/bi/mi/basic.naver?code=186114" title="밥정">밥정</a>
밥정
/movie/bi/mi/basic.naver?code=186114
🔎 영화페이지 제목 가져와보기
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
moves = soup.select('#old_content > table > tbody > tr')
# print(moves)
for move in moves:
a = move.select_one('td.title > div > a')
if a is not None:
print(a.text)
👀 출력
밥정
그린 북
가버나움
디지몬 어드벤처 라스트 에볼루션 : 인연
원더
베일리 어게인
먼 훗날 우리
아일라
당갈
극장판 바이올렛 에버가든
포드 V 페라리
주전장
쇼생크 탈출
...
🔖08.웹스크래핑(크롤링) 연습
🔎 select
[ ]안에 html 태그가 들어 있는 형태
🔎 select_one
html 코드만 들어있음
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
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a
#rank
#old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img
#old_content > table > tbody > tr:nth-child(3) > td:nth-child(1) > img
#scores
#old_content > table > tbody > tr:nth-child(2) > td.point
movies = soup.select('#old_content > table > tbody > tr')
# print(moves)
for movie in movies:
a = movie.select_one('td.title > div > a')
# print(movie.select_one('td:nth-child(1) > img')['alt'])
if a is not None:
title = a.text
rank = movie.select_one('td:nth-child(1) > img')['alt']
score = movie.select_one('td.point').text
print(rank, title, score)
👀 출력
01 밥정 9.64
02 그린 북 9.59
03 가버나움 9.59
04 디지몬 어드벤처 라스트 에볼루션 : 인연 9.53
05 원더 9.52
06 베일리 어게인 9.52
07 먼 훗날 우리 9.52
08 아일라 9.51
09 당갈 9.49
010 극장판 바이올렛 에버가든 9.48
11 포드 V 페라리 9.48
12 주전장 9.47
...
☀️ 느낀점
스스로 추출해보려다가 select로 하면 [ ]안에 html이 담겨져 있는 형태로 추출되서 당황했었다. 알고보기 html만 추출하려면 한줄씩 select_one을 해줘야 했다.
또한 none값의 row가 같아서 그냥 제목이 none값이면 순위와 별점 모두 추출할 필요 없다는 사실! 혹여나 다른 행에 none값이 있지 않을까 염려했었다.
추출한 값을 다 list에 담아서 추출해야 하나~ 심각하게 고민했는데, 그럴 필요 없었다. 추후엔 mongoDB를 깔고 웹크롤링으로 추출한 값을 DB에 담는 걸 공부할 예정이다.
오늘 이틀치 진도를 하루안에 다 했다. 블로그에 정리하면서 하려니 생각보다 시간이 많이 소모되지만, 모바일로도 틈틈히 읽어보면서 기초를 다져야겠다. 오늘한 크롤링 부분은 반복해서 하고도 헷갈린다면 한번 더 연습해봐야겠다.
'풀스택 개발일지' 카테고리의 다른 글
[웹개발 종합반 3주차] 3주차 숙제 (0) | 2022.10.23 |
---|---|
[웹개발 종합반 3주차] DB, mongoDB (0) | 2022.10.23 |
[웹개발 종합반 3주차] Python, 크롤링, mongoDB (2) | 2022.10.21 |
[웹개발 종합반 2주차] 2주차 숙제 (2) | 2022.10.21 |
[웹개발 종합반 2주차] Ajax 연습하기 (0) | 2022.10.21 |
댓글