지난 번 네이버 금융 사이트 크롤링을 하는 법을 포스팅했습니다. 네이버 금융 페이지에서 종목에 대한 뉴스기사를 가져오는 것 방법을 배웠는데요, 이번에는 html문서를 가져오는 것을 막은 사이트를 크롤링하는 법을 알아보겠습니다.
멜론 실시간 차트(www.melon.com/chart/index.htm)에서 1 ~ 100위까지의 곡, 가수, 앨범을 가져와보겠습니다.
멜론 실시간 차트는 1시간마다 갱신됩니다.
import requests
from bs4 import BeautifulSoup
request = requests.get('https://www.melon.com/chart/day/index.htm') ## 주간 차트를 크롤링 할 것임
html = request.text
bs = BeautifulSoup(html, 'html.parser')
bs
코드를 실행해보면 bs안에 아무것도 없는 것을 확인할 수 있습니다. 이 때 우리는 헤더를 입력해서 멜론에 접속하는 게 컴퓨터가 아니고 사람임을 알려줘야 합니다.
자신의 헤더는 m.avalon.co.kr/check.html에서 확인할 수 있습니다.
import requests
from bs4 import BeautifulSoup
header = {'User-Agent' : '본인 헤더 입력하세요'}
request = requests.get('https://www.melon.com/chart/day/index.htm', headers = header) ## 주간 차트를 크롤링 할 것임
html = request.text
bs = BeautifulSoup(html, 'html.parser')
bs
코드를 실행해보면 사이트 html을 잘 가져온 것을 확인할 수 있습니다.
내친 김에 지금 시간부터 실시간 차트를 1시간마다 가져와서 csv파일에 누적해서 저장하는 코드를 만들겠습니다.
import requests
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
from datetime import datetime
import os
import threading
import time
# 사이트 HTML
def mellon_daily_chart():
header = {'User-Agent' : '본인 헤더를 입력해주세요!'}
request = requests.get('https://www.melon.com/chart/index.htm', headers = header)
html = request.text
bs = BeautifulSoup(html, 'html.parser')
bs
## 데이터 긁어오기
title = []
singer = []
album = []
date = []
ranking = []
titles = bs.find_all("div", {"class": "ellipsis rank01"})
singers = bs.find_all("div", {"class": "ellipsis rank02"})
albums = bs.find_all("div",{"class": "ellipsis rank03"})
for i in range(1,101):
ranking.append(i)
date.append(datetime.today().strftime('%Y-%m-%d'))
for t in titles:
title.append(t.find('a').text)
for s in singers:
singer.append(s.find('a').text)
for a in albums:
album.append(a.find('a').text)
## 데이터 csv로 이어서 저장
df = pd.DataFrame([date,ranking,title,singer,album],index=['날짜','순위','제목','가수','앨범'])
df=df.T
if not os.path.exists('mellon.csv'):
df.to_csv('mellon.csv', index=False, mode='w', encoding='utf-8-sig')
else:
df.to_csv('mellon.csv', index=False, mode='a', encoding='utf-8-sig', header=False)
## 1시간마다 실행
threading.Timer(3600, mellon_daily_chart).start()
mellon_daily_chart()
다음 포스팅에서는 동적페이지 크롤링, 쿠키처리에 대해 알아보겠습니다.
출처 :
파이썬 csv파일 누적 저장 -> hogni.tistory.com/10
'웹 크롤링' 카테고리의 다른 글
웹 크롤링 - [Python]파이썬으로 카카오 맵 API 사용하기(4) - 반경을 이용한 검색 (2) | 2021.05.24 |
---|---|
웹 크롤링 - [Python]파이썬으로 카카오 맵 API 사용하기(3) - 도로명 주소를 지번 주소로 변환 (0) | 2021.05.24 |
웹 크롤링 - [Python]파이썬으로 카카오 맵 API 사용하기(2) - 특정 범위 검색 (2) | 2021.03.31 |
웹 크롤링 - [Python]파이썬으로 카카오 맵 API 사용하기(1) - 키워드 검색 (9) | 2021.03.30 |
웹 크롤링 - 네이버 금융 기사 가져오기(정적 페이지 응용) (0) | 2021.03.20 |
댓글