스파르타코딩/스파르타코딩 3주차
지니 크롤링 문제
usop
2022. 6. 6. 17:42
위에 그림처럼 지니 차트가 출력되게 크롤링 하기.
지니 url : https://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1
슬라이싱(slicing) 과 공백 제거(strip)를 이용해야 깔끔하게 한 줄에 정리되서 나온다.
slicing 사용은 예를 들어 설명하자면 다음과 같은 배열을 가진 A가 있다.
A = ['a','b','c','d','e']
A[start : end : step] 의 규칙으로 사용한다.
start는 시작지점, end는 끝지점(끝지점은 포함하지 않고 그 앞까지), step 보폭(방향 및 몇개씩 끊어올지 등의 규칙)
A[0:2] => 0번째 부터 시작이니 'a'부터 , 2번째 앞까지니깐 'c' 의 앞 까지가 해당된다. 즉, 'a','b' 만 출력된다.
A[1:4] => 'b','c','d'
A[::2] => 2칸씩 이동하며 가져온다. 'a','c','e'
A[3::-1] => 3번부터 거꾸로 가져온다. 'd','c','b','a'
strip은 공백 제거
<전체 code>
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
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=D&ymd=20200403&hh=23&rtm=N&pg=1', headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs:
numbers = tr.select_one('td.number').text[0:2].strip()
title = tr.select_one('td.info > a.title.ellipsis').text.strip()
singer = tr.select_one('td.info > a.artist.ellipsis').text
print(numbers, title, singer)
# 슬라이싱(slicing) 과 strip(공백 제거) [0:2]는 0번째 문자부터, 2번째 앞 까지 가져와라, strip은 공백제거하기