👉 input
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'}
data = requests.get('https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701',headers=headers)
# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')
# 전체 반복되는 부분 인덱스
musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for music in musics:
# rank 값을 예시로 반복되는 부분에서 뒤에 부분 인덱스 / 앞에 두 자리만 표시 / 여백 제거
a = music.select_one('td.number').text[0:2].strip()
if a is not None:
rank = a
# 텍스트로 변환 / 여백 제거 / 왼쪽에 있는 '19금' 글씨 제거 / 여백 제거
title = music.select_one('td.info > a.title.ellipsis').text.strip().lstrip('19금').strip()
# 가수명 텍스트로 변환
artist = music.select_one('td.info > a.artist.ellipsis').text
print(rank, title, artist)
📍 습관적으로
if
를 써서 값이 없는 데이터를 제거하도록 적었다. 오류는 나지 않았지만, 이 예시는 none제거 조건을 안 썼어도 되는 환경이라 결론적으로는 쓸데없이 두어줄 코드가 길어졌다.
👇 if 조건문 생략 ver.
for music in musics:
# 반복되는 부분에서 뒷 부분 인덱스 / 앞에 두 자리만 텍스트로 표시 / 여백 제거
rank = music.select_one('td.number').text[0:2].strip()
# 텍스트로 변환 / 여백 제거 / 왼쪽에 있는 '19금' 글씨 제거 / 여백 제거
title = music.select_one('td.info > a.title.ellipsis').text.strip().lstrip('19금').strip()
# 가수명 텍스트로 변환
artist = music.select_one('td.info > a.artist.ellipsis').text
print(rank, title, artist)
👉 output
🔎 추가 서칭한 내용
- text[글자 시작점:나타낼 글자 수]
- strip() : 파이썬 여백제거 함수
strip(['글자') : '글자'를 문자열의 왼쪽과 오른쪽에서 제거
lstrip(['글자']) : '글자'를 문자열의 왼쪽에서 제거
rstrip(['글자']) : '글자'를 문자열의 오른쪽에서 제거
rank
나타내기for music in musics:
rank = music.select_one('td.number').text
print(rank)
for music in musics:
rank = music.select_one('td.number').text[0:2]
print(rank)
for music in musics:
rank = music.select_one('td.number').text[0:2].strip()
print(rank)
title
나타내기for music in musics:
rank = music.select_one('td.number').text[0:2].strip()
title = music.select_one('td.info > a.title.ellipsis').text.strip()
print(rank, title)
for music in musics:
rank = music.select_one('td.number').text[0:2].strip()
title = music.select_one('td.info > a.title.ellipsis').text.strip().lstrip('19금').strip()
print(rank, title)
❗️궁금한 점
title = music.select_one('td.info > a.title.ellipsis').text.strip().lstrip('19금')
여기까지는 이해되는데 왜
.lstrip('19금')
뒤에.strip()
가 한 번 더 붙어야 완전히 여백이 없어지는지는 아직 모르겠다.
artist
나타내기.text
변환 전for music in musics:
artist = music.select_one('td.info > a.artist.ellipsis')
print(artist)
.text
변환 후for music in musics:
artist = music.select_one('td.info > a.artist.ellipsis').text
print(artist)
print(rank, title, artist)
for music in musics:
rank = music.select_one('td.number').text[0:2].strip()
title = music.select_one('td.info > a.title.ellipsis').text.strip().lstrip('19금').strip()
artist = music.select_one('td.info > a.artist.ellipsis').text
print(rank, title, artist)