import requests
from bs4 import BeautifulSoup
headers = {'User-Agent' : ''}
data = requests.get('크롤링할 페이지 주소',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# 여기까지가 bs4사용하기 위해서 붙일 내용
movies = soup.select('#old_content > table > tbody > tr')
for movie in movies:
a_tag = movie.select_one('td.title > div > a')
if a_tag is not None:
rank = movie.select_one('td:nth-child(1) > img')['alt']
title = a_tag.text
star = movie.select_one('td.point').text
print(rank, title, star)
# 속성을 잘못 지정해서 계속 오류가 났었음 movie에서 select_one했어야 했는데
# movies로 써서 결과값이 출력이 안됬었음.. 그리고 속성값은 () 밖에 []로 뺐어야
# 했는데 위치를 잘못써서 헤메었음 주의하기!!
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
headers = {'User-Agent' : ''}
data = requests.get('크롤링할 페이지 주소',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for music in musics:
rank = music.select_one('td.number').text[0:2].strip()
#[0:2]처음부터 2번째까지 출력하라는 뜻?ㅠ_ㅠ .strip()은 문자열 앞뒤 공백삭제
title = music.select_one('td.info > a.title.ellipsis').text.strip()
singer = music.select_one('td.info > a.artist.ellipsis').text.strip()
print(rank, title, singer)
지니뮤직에서 순위를 추출할 때 텍스트들이 막 흩어져서 필요없는 텍스트까지도 출력되었다. 앞에 순위만 자르고 싶어서 계속 찾다가 결국은 답지 커닝했다.
text[0:2] 를 쓰면 된다는데 뭐지하고 찾아보니 0~2번째 문자열을 출력하라는 뜻.. 구글에 '문자열 일부 출력' 이라고 검색했어야 했는데 어떤 내용을 검색해야하 할지도 몰랐다는게 가장 큰 문제였다.
다음에는 구글링을 할 때 좀 더 고민을 해보고 여러가지로 해봐야겠다.