지니뮤직 크롤러 만들기 세 번째
저번에 차트 순위 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'}
url = 'https://www.genie.co.kr/chart/top200'
resp = requests.get(url, headers = headers)
soup = BeautifulSoup(resp.text, 'html.parser')
song = soup.find("a",{"class":"title ellipsis"}).text
print(song.strip())
구글링을 통해서 알아본 결과 strip함수를 통해서 해결할 수 있었다.
print(song)에다 .strip()를 추가해주었다
깔끔하게 해결된 모습이다
이제 남은 문제점인 차트 순위 전체를 출력해야 되는데
한번 for문으로 작성해보았다
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'}
url = 'https://www.genie.co.kr/chart/top200'
resp = requests.get(url, headers = headers)
soup = BeautifulSoup(resp.text, 'html.parser')
song = soup.find("a",{"class":"title ellipsis"}).text
for songs in song:
print(song.strip())
아이유의 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'}
url = 'https://www.genie.co.kr/chart/top200'
resp = requests.get(url, headers = headers)
soup = BeautifulSoup(resp.text, 'html.parser')
songs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for song in songs:
title = song.find('td',{'class':'info'}).find('a',{'class':'title ellipsis'}).text
print(title.strip())
이렇게 수정해주었다
먼저 9번째 줄에 .find를 .select로 tr까지의 주소를 입력해주었고
for문을 이용해서 find함수로 td에 접근하여 title ellipsis클래스를 찾아서 text로 저장해주고
.strip()를통해서 공백을 없애준다음 출력을 한 결과
50위까지 출력이 잘되었다.
2틀간의 노력 끝에 나만의 지니뮤직 크롤러가 완성되었다.
총 3~4시간정도 소요된거같다.
크롤링 개발환경 설정과 여러 가지 구글링을 통해 완성했다.
아직 크롤링에 대해서 이해가 잘 되지 않았다. 계속해서 크롤러를 만들어보면서 알아보도록 하자