배고픈 개발자 이야기
[2021/07/13] 파이썬 기초 (스크래핑, pyplot) 본문
728x90
- 네이버 영화 평점 수집
https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=cur&date=20210427
위 사이트는 네이버 영화 순위로 오늘날짜로 맞춰주면 그날 랭킹을 볼 수 있다.
아래와 같은 코드로 간단한 영화 랭킹을 긁어올 수 있다.
import urllib.request # http 요청용
from bs4 import BeautifulSoup # 스크래핑용
# 7월 12일 네이버 영화 랭킹 url 요청
response = urllib.request.urlopen("https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=cur&date=20210712")
soup = BeautifulSoup(response, "html.parser") # parser 객체 생성
titleOfMovie = soup.findAll("div", {"class":"tit5"}) # class tit5 내용 불러오기 (제목)
pointOfMovie = soup.findAll("td", {"class":"point"}) # class point 내용 불러오기 (평점)
for title, point in zip(titleOfMovie, pointOfMovie): # 일괄처리를 위한 packing
print("=" * 100)
print("title.text.strip() = ", title.text.strip())
print("title.find('a')['href] = ", title.find('a').attrs['href'])
print("point.text = ", point.text)
print("=" * 100)
아래와 같은 결과로 긁어와 진다.
- 기상청 날씨 수집
아래와 같이 기상청에서 날씨 데이터를 긁어오고 데이터 처리 / 저장 / 불러오기를 할 수 있다.
import requests
import pandas as pd# 데이터 처리를 위한 모듈
from bs4 import BeautifulSoup
response = requests.get("https://www.weather.go.kr/weather/observation/currentweather.jsp")
soup = BeautifulSoup(response.content, "html.parser")
table = soup.find("table", {"class":"table_develop3"}) # 긁어오는 태그의 상위 태그 테이블 정보
data = []
for tr in table.findAll("tr"): # 하위 태그를 리스트로 받아와 원하는 정보만 저장
if tr.find('a'):
data.append([tr.find("a").text, tr.findAll("td")[5].text, tr.findAll("td")[9].text])
with open("weather.csv", "w") as file: # csv 파일생성
file.write("point,temperature,humidity") # coloum 이름 생성
for point, temp, humi in data: # 저장한 하위 태그 내용 추가
file.write("\n{},{},{}".format(point, temp, humi))
df = pd.read_csv("weather.csv") # 저장한 파일 불러오기
df["point"] # point column 불러오기
df["point"] == "합천" # bool 표기 (참인 row만 true)
df[df["point"] == "합천"] # 합천인 row만 보기
df["point"].isin(["강릉", "흑산도", "합천"]) # 리스트에 해당하는 row만 true
df[df["point"].isin(["강릉","흑산도","합천"])] # 해당 row만 출력
df = df.set_index("point") # index column을 기본(정수)에서 point column으로 set
df.loc[["서울","수원","인천"]] # point 값과 loc함수로 검색 가능
df = pd.read_csv( # index_col 지정하면서 생성가능
"weather.csv",
index_col = "point"
)
df.reset_index() # index column 초기화
- 날씨 데이터 pyplot으로 그리기
#그래프의 전체적인 설정을 하는 객체
import matplotlib as mpl
#그래프를 그리는 객체
import matplotlib.pyplot as plt
#그래프의 글자를 선명하게 출력하도록 설정
%config InlineBackend.figure_format = 'retina'
#나눔 글자체 설치
!apt -qq -y install fonts-nanum
import matplotlib.font_manager as fm
#나눔고딕 글자체의 전체 경로 설정
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
#글자체의 경로와 글자 크기 설정
font = fm.FontProperties(fname=fontpath, size=9)
#폰트 이름 설정
plt.rc('font', family='NanumBarunGothic')
#폰트 업데이트
mpl.font_manager._rebuild()
#그래프 그림 (가로 5 세로5)
plt.figure(figsize=(5,5))
#X ,Y 좌표 설정
plt.plot([0,1], [0,1], label='한글테스트용')
#범례 표시
plt.legend()
#그래프 그림
plt.show()
#그래프 스타일 목록
plt.style.available
#사용할 style 선택
plt.style.use("ggplot")
# kind:막대그래프, legend:범례
ax = df.plot(kind='bar', title='날씨', figsize=(12, 4), legend=True, fontsize=12)
ax.set_xlabel('도시', fontsize=12)
ax.set_ylabel('기온/습도', fontsize=12)
ax.legend(['기온', '습도'], fontsize=12)
- anaconda 환경설정
# Windows 한글 폰트 설정
font_name = mpl.font_manager.FontProperties(fname='C:/Windows/Fonts/malgum.ttf').get_name()
mpl.rc('font', family=font_name)
'인포섹 아카데미' 카테고리의 다른 글
[2021/07/15] 정형/비정형 데이터 처리 (0) | 2021.07.15 |
---|---|
[2021/07/14] 정형/비정형 데이터 처리 (0) | 2021.07.14 |
[2021/07/12] 파이썬 기초 (가변인자, BS4크롤링) (0) | 2021.07.12 |
[2021/07/09] 파이썬 기초 (0) | 2021.07.09 |
[2021/07/08] 파이썬 기초 (반복문) (0) | 2021.07.08 |
Comments