DevSSOM
파이썬 크롤링 - 간단한 실습 : 벅스뮤직 음원차트 추출 본문
반응형
bugs 실시간 음원차트 순위 추출하기
bugs 실시간 음원차트의 순위별로 곡명을 담은 리스트를 출력하기. https://music.bugs.co.kr/chart
출력 예시
[곡명1, 곡명2, 곡명3, ———]
팁
- \n은 개행문자(줄바꿈 문자). \n을 포함한 문자열 변수 text가 있을 때, \n을 제거하기 위해서는 text.replace("\n","") 활용.
- str.replace("a", "b") : 문자열 str에 등장하는 "a"란 문자를 모두 "b"로 대체하는 함수
import requests
from bs4 import BeautifulSoup
def crawling(soup) :
# soup 객체에서 추출해야 하는 정보를 찾고 반환
return None
def main() :
custom_header = {
'referer' : 'https://music.bugs.co.kr/',
'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
url = "https://music.bugs.co.kr/chart"
req = requests.get(url, headers = custom_header)
soup = BeautifulSoup(req.text, "html.parser")
# crawling 함수의 결과를 출력
print(crawling(soup))
if __name__ == "__main__" :
main()
>>>
벅스차트를 구글 검사로 개발자 도구에서 HTML을 확인해보면, 차트 순위에 있는 노래 제목은 <p> 태그 안에 있고, 더 상위로 올라가보면 <tbody>에 벅스차트에 있는 노래들의 제목들이 전부 들어있음을 확인.
def crawling(soup) :
# soup 객체에서 추출해야 하는 정보를 찾고 반환
tbody = soup.find("tbody")
print(tbody.find_all("p"))
return None
그러면 실시간 1위인 브레이브걸스의 치맛바람, 2위인 트와이스 Alcohol-Free, 3위인 에스파의 Next Level.... 이렇게 쭉쭉쭉 html들이 긁어짐. 근데 너무 막 긁어졌잖아. 알아보기 힘들게. 그래서 곡 제목들의 class인 title 클래스로 한 번 더 특정시켜줄거야.
def crawling(soup) :
# soup 객체에서 추출해야 하는 정보를 찾고 반환
tbody = soup.find("tbody")
print(tbody.find_all("p", class_="title"))
return None
곡 제목만 있긴 한데, 아직도 더럽... get_text()를 써보자.
def crawling(soup) :
# soup 객체에서 추출해야 하는 정보를 찾고 반환
tbody = soup.find("tbody")
for p in tbody.find_all("p", class_= "title"):
print(p.get_text())
return None
근데, 얘네가 또 줄바꿈이 심하잖아. 개행문자(줄바꿈 문자) \n이 쓰여서 그런거니까, \n을 없애줘야돼. text.replace("\n", "") 으로. \n을 비어있는 문자열로 바꿔주는거야.
def crawling(soup) :
# soup 객체에서 추출해야 하는 정보를 찾고 반환
tbody = soup.find("tbody")
for p in tbody.find_all("p", class_="title"):
print(p.get_text().replace("\n", ""))
return None
그럼 이렇게 제목이 한 줄에 하나씩 나타나게 됨. 이제 마지막으로 얘네를 리스트 안에 넣어줘야 되니까 result 리스트 안에 append 함수로 넣어줘.
def crawling(soup) :
# soup 객체에서 추출해야 하는 정보를 찾고 반환
tbody = soup.find("tbody")
result = []
for p in tbody.find_all("p", class_="title"):
result.append(p.get_text().replace("\n", ""))
return result
그럼 끝!
최종 코드
import requests
from bs4 import BeautifulSoup
def crawling(soup) :
# soup 객체에서 추출해야 하는 정보를 찾고 반환
tbody = soup.find("tbody")
result = []
for p in tbody.find_all("p", class_="title"):
result.append(p.get_text().replace("\n", ""))
return result
def main() :
custom_header = {
'referer' : 'https://music.bugs.co.kr/',
'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
url = "https://music.bugs.co.kr/chart"
req = requests.get(url, headers = custom_header)
soup = BeautifulSoup(req.text, "html.parser")
# crawling 함수의 결과를 출력합니다.
print(crawling(soup))
if __name__ == "__main__" :
main()
728x90
반응형
'Python > 크롤링' 카테고리의 다른 글
파이썬 크롤링 - HTML 태그 속성 (0) | 2021.06.27 |
---|---|
파이썬 크롤링 - 쿼리 개념 (0) | 2021.06.26 |
파이썬 크롤링 - 간단한 실습 : 네이트 판 댓글 수집 (1) | 2021.06.25 |
파이썬 크롤링 - 간단한 실습 : 영화 리뷰 수집 (0) | 2021.06.24 |
파이썬 크롤링 - 간단한 실습 : 네이버 뉴스 헤드라인 추출 (0) | 2021.06.22 |
파이썬 크롤링 - 간단한 실습 : 네이버 헤드 뉴스 찾기 (0) | 2021.06.21 |
파이썬 크롤링 - BeautifulSoup 기본 개념 (0) | 2021.06.21 |
댓글