크롤러
cmd창에서 pip install selenium
pip install chrome-autoinstaller
파이썬 IDLE창에서 import chromedriver_autoinstaller
chromedriver_autoinstaller.installer()
주피터에서
%pip install chromedriver_autoinstaller
import chromedriver_autoinstaller
chromedriver_autoinstaller.install( )
from selenium import webdriver
driver= webdriver.Chrome()
멜론차트 크롤링하기
# 멜론에서 멜론차트 크롤링하기
#Step 1. 필요한 모듈을 로딩합니다
from selenium import webdriver
import time
#Step 2.
print("=" *100)
print("멜론")
print("=" *100)
print("\n")
#Step 3. 크롬 드라이버 설정 및 웹 페이지 열기
chrome_path = "c:/temp/chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
url = 'https://www.melon.com/'
driver.get(url) #페이지에 접속
time.sleep(2)
멜론 페이지에서 멜론차트 클릭
driver.find_element_by_link_text('멜론차트').click()
time.sleep(2)
beautiful soup사용
#Step 6.Beautiful Soup 로 본문 내용만 추출하기
from bs4 import BeautifulSoup
html_1 = driver.page_source #현재 페이지의 전체 소스코드를 다 가져오기
soup_1 = BeautifulSoup(html_1, 'html.parser')
content_1 = soup_1.find('div','service_list_song type02 no_rank d_song_list').find_all('a')
for i in content_1 :
print(i.get_text().replace("\n"," ").strip()) #stripe 좌우공백없애기
print("\n")
그런데 이렇게 긁어오면 가수가 2번씩 출력됨
from selenium import webdriver
import time
ft_name = input('결과를 저장할 txt형식의 파일명을 쓰세요(예: c:\\temp\\riss.txt): ')
fc_name = input('결과를 저장할 csv형식의 파일명을 쓰세요(예: c:\\temp\\riss.csv): ')
fx_name = input('결과를 저장할 xls형식의 파일명을 쓰세요(예: c:\\temp\\riss.xls): ')
chrome_path = "c:/temp/chromedriver_win32/chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
url = 'https://www.melon.com/'
driver.get(url)
time.sleep(2)
driver.find_element_by_link_text('멜론차트').click()
time.sleep(2)
#Step 6.Beautiful Soup 로 본문 내용만 추출하기
from bs4 import BeautifulSoup
html_1 = driver.page_source #현재 페이지의 전체 소스코드를 다 가져오기
soup_1 = BeautifulSoup(html_1, 'html.parser')
content_1 = soup_1.find('div','service_list_song type02 no_rank d_song_list').find_all('tr') # 10개의 li태그
for i in content_1 :
print(i.get_text().replace("\n"," ").strip()) #stripe 좌우공백없애기
no2 = [ ] #순위
title2 = [ ] #노래 제목
writer2 = [ ] #가수 저장
org2 = [ ] #앨범명 저장
no = 1
for b in content_1[1:] :
#1. 논문제목 있을 경우만
f = open(ft_name, 'a' , encoding="UTF-8")
print('1.순위:',no)
no2.append(no)
f.write('\n'+'1.순위:' + str(no))
title = b.find('div','wrap_song_info').find('span').get_text()
title = title.strip()
print('2.제목:',title)
title2.append(title)
f.write('\n' + '2.제목:' + title)
singer= b.find('div','ellipsis rank02').find('a').get_text()
print('3.가수:',singer)
writer2.append(singer)
f.write('\n' + '3.가수:' + singer)
org = b.find('div','ellipsis rank03').find('a').get_text()
print('4.앨범:' , org)
org2.append(org)
f.write('\n' + '4.앨범:' + org + '\n')
f.close( )
no += 1
print("\n")
# 페이지 변경 전 1초 대기
print("요청하신 작업이 모두 완료되었습니다")
# Step 10. 수집된 데이터를 xls와 csv 형태로 저장하기
import pandas as pd
df = pd.DataFrame()
df['순위']=no2
df['제목']=pd.Series(title2)
df['가수']=pd.Series(writer2)
df['앨범']=pd.Series(org2)
# xls 형태로 저장하기
df.to_excel(fx_name,index=False, encoding="utf-8")
# csv 형태로 저장하기
df.to_csv(fc_name,index=False, encoding="utf-8-sig")
print('요청하신 데이터 수집 작업이 정상적으로 완료되었습니다')
스터디에서 제시해준 해결방안
두 번째는 빌보드에서 긁어오기
#Step 1. 필요한 모듈을 로딩합니다
from selenium import webdriver
import time
#Step 2.
print("=" *100)
print("빌보드")
print("=" *100)
print("\n")
#Step 3. 크롬 드라이버 설정 및 웹 페이지 열기
chrome_path = "c:/temp/chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
url = 'https://www.billboard.com/'
driver.get(url) #페이지에 접속
time.sleep(2)
빌보드 페이지에서 HOT 100클릭
driver.find_element_by_link_text('HOT 100').click()
time.sleep(2)
Beautiful Soup
#Step 6.Beautiful Soup 로 본문 내용만 추출하기
from bs4 import BeautifulSoup
html_1 = driver.page_source #현재 페이지의 전체 소스코드를 다 가져오기
soup_1 = BeautifulSoup(html_1, 'html.parser')
content_1 = soup_1.find('div','chart-list__wrapper').find_all('span','chart-element__information') # 10개의 li태그
for i in content_1 :
print(i.get_text().replace("\n"," ").strip()) #stripe 좌우공백없애기
print("\n")
이것도 출력 결과가 깨끗하지 못함
그래서 스터디에서 나온 해결방안
#Step 1. 필요한 모듈을 로딩합니다
from selenium import webdriver
import time
#Step 2. 사용자에게 검색 관련 정보들을 입력 받습니다.
print("=" *100)
print(" 이 크롤러는 Billboard Hot100 차트 수집용 웹크롤러입니다.")
print("=" *100)
print("\n")
chrome_path = "c:/temp/chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
url = 'https://www.billboard.com/charts/hot-100'
driver.get(url)
time.sleep(2)
#Step 6.Beautiful Soup 로 본문 내용만 추출하기
from bs4 import BeautifulSoup
html_1 = driver.page_source #현재 페이지의 전체 소스코드를 다 가져오기
soup_1 = BeautifulSoup(html_1, 'html.parser') #pharsing을 시킴
content_1 = soup_1.find('div','chart-list__wrapper').find_all('button','chart-element__wrapper display--flex flex--grow sort--this-week')
for i in content_1 :
grade = i.find('span','chart-element__rank__number').get_text()
songName = i.find('span','chart-element__information__song text--truncate color--primary').get_text()
artist = i.find('span','chart-element__information__artist text--truncate color--secondary').get_text()
print(f'{grade}. {artist} - {songName}')
'데이터 청년 캠퍼스(경남대학교) > 스터디' 카테고리의 다른 글
2021-07-14 (0) | 2021.07.14 |
---|---|
2021-07-13 (0) | 2021.07.14 |
2021 - 07 - 07 (0) | 2021.07.07 |
2021-07-06 (0) | 2021.07.06 |
2021-07-05 (0) | 2021.07.05 |