이번 장에서는 음원사이트 내 음원차트를 크롤링해보고 , wordcloud를 실습해볼 것이다.
import requests
from bs4 import BeautifulSoup
url = 'https://movie.naver.com/movie/sdb/rank/rmovie.naver'
r = requests.get(url)
html = r.text
soup = BeautifulSoup(html, 'html.parser')
title = soup.find_all('div',class_ = 'tit3')
#td 태그를 find 하면 여러가지 태그들이 나오지만 순위만 가져오기 위한 코드 작성
tr = soup.find_all('tr')
rank =[]
for i in tr:
td = i.find('td',class_='ac')
if td != None:
imgtag = td.find('img')
if imgtag == None:
rank.append(None) #이미지 태그 없는 부분 을 append
else:
rank.append(imgtag.get('alt'))
print(rank)
for i in range(len(rank)):
if rank[i] == None:
print(rank[i-1],'위: ',title[i].text.replace('\n',''))
continue
print(rank[i],'위: ',title[i].text.replace('\n',''))
- 벅스 음원 순위 출력하기
import requests
from bs4 import BeautifulSoup
url ='https://music.bugs.co.kr/chart'
r = requests.get(url)
html = r.text
soup = BeautifulSoup(html,'html.parser')
titletag = soup.find_all('p',class_='title')
#리스트 컴프리헨션
li = [line.text.replace('\n','') for line in titletag]
#for i in titletag:
# li.append(i.text.replace('\n',''))
for i in range(len(li)):
print(i+1,'위: ',li[i])
- 멜론 음원 순위 출력하기
http://www.useragentstring.com/
크롤링을 막는 사이트가 존재한다. 직접 사용자 정보를 넘겨줘 본인이 로봇이 아닌 사용자임을 확인시켜줘야 접근가능하다. 위 사이트를 통해 본인 정보를 확인하고 복사하여 딕셔너리를 넘겨줘 해결하자.
import requests
from bs4 import BeautifulSoup
url = 'https://www.melon.com/chart/index.htm?dayTime=2021092320'
r = requests.get(url.headers = header)
header = {'uesr':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 Edg/93.0.961.52'}
html=r.text
soup = BeautifulSoup(html,'html.parser')
titletag=soup.find_all('div',class_='ellipsis rank01'
#보기 좋게 리스트에 담기
li=[]
for tag in titletag:
li.appned(tag.text.replace('\n',''))
for i in range(len(li)):
print('%3d위: ',%(i+1),li[i])
오류코드 내용과 의미(404오류,200)
1__ :현재 작업중
2__ :요청이 성공적
3__ :요청이 완료 되었으나 리다이렉션 필요(만료)
4__ :요청 잘못되었다
5__ :서버의 오류문제(사용자 잘못이 아님)
- 지니뮤직 음원 순위 출력하기
지니뮤직 사이트는 1~50위가 1페이지 51~100위가 2페이지로 구성되어 있어 아래와 같이 반복문을 돌려 100위까지 연달아 출력되게 하였다.
import reuqests
from bs4 import BeautifulSoup
rank=0
for i in range(2):
url='https://www.genie.co.kr/chart/top200?ditc=D&ymd=20210923&hh=20&rtm=Y&pg=%d'%(i+1) #1~50 두번 출력
header1={'user':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36 Edg/93.0.961.52'}
res = requests.get(url,headers = header1)
html = res.text
soup = BeautifulSoup(html,'html.parser')
title = [line.text.strip() for line in soup.find_all('a',class_='title ellipsis')]
for i1 in title:
rank+=1
print('%3d위: %s'%(rank,i1))
WordCloud 사용해보기
-여러가지 단어들 중에 한눈에 중요도를 파악할 수 있는 것이다. 신문이나 기사등에서 볼 수 있다.
-외부모듈인 wordcloud를 사용한다.
- 시각화 -데이터 타입에 알맞은 그래프를 선택한다.
- 크롤링 -내가 원하는 데이터만 뽑아오려면 어떤 태그를 가져와야하는지 잘 파악해야한다.
- 파일입출력 -내가 원하는 데이터가 어떤 방식으로 구분되어있는지 알아야한다.
import wordcloud
import matplotlib.pyplot as plt
word ={
'Python' : 20,
'Java' : 15,
'web' :10,
'Ai' : 8,
'DeepLearning' : 16,
'딥러닝' :10
}
#객체생성
#한글 폰트 설정: (fond_path매개변수에 글꼴 경로를 알려준다.)
#배경색변경: (background_color='색')
wc = wordcloud.WordCloud(font_path='/content/drive/MyDrive/1900_python2_jsh/NanumSquareRoundB.ttf',background_color='white')
#(딕셔너리)-->딕셔너리의value값을 빈도로 표현
cloud = wc.generate_from_frequencies(word)
plt.imshow(cloud)
#축제거
plt.axis('off')
plt.show()
import wordcloud
import matplotlib.pyplot as plt
li =['일자리', '분열', '명예', '정신', '적', '원주민', '기회', '외침', '헌법', '분노', '전국', '이웃', '연합', '존엄', '공포', '악마', '증오', '나라', '자유', '차별', '경의', '가능성', '복구', '전사자', '인종', '적개심', '도전', '안보', '역사', '애국자', '지구', '목숨', '치유', '경청', '결의', '시기', '부활', '진실', '관용', '우리', '회복', '취임', '위험', '수호', '미국', '국민', '통합', '담보', '생존', '동맹', '희망', '바이러스', '헌신', '겨울', '민주주의', '대통령', '승리','사업체']
#아래의 해당 txt파일에서 위li리스트의 단어들이 몇번 등장하는지 count함
words={}
with open('/content/drive/MyDrive/1900_python2_jsh/america.txt','r') as f:
msg = f.read()
for word in li:
words[word] = msg.count(word)
#print(words)
#데이터 시각화부분
wc = wordcloud.WordCloud(font_path='/content/drive/MyDrive/1900_python2_jsh/NanumSquareRoundB.ttf',background_color='white')
cloud = wc.generate_from_frequencies(words)
plt.imshow(cloud)
plt.axis('off')
plt.show()
'Python' 카테고리의 다른 글
Conda 가상환경 (0) | 2022.03.14 |
---|---|
파이썬 크롤링과 시각화 기본다지기(6)_알고리즘,자료구조 기초 (0) | 2021.10.01 |
파이썬 크롤링과 시각화 기본다지기(4) (0) | 2021.09.23 |
파이썬 크롤링과 시각화 기본다지기(3) (0) | 2021.09.21 |
파이썬 크롤링과 시각화 기본다지기(2) (2) | 2021.09.21 |