MBC크롤링
import pandas as pd
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from dateutil.parser import parse
driver = webdriver.Chrome('C:./chromedriver_win32/chromedriver')
driver.get('http://www.imbc.com/broad/radio/')
programUrl = []
programTitle = []
programInfo= []
#table = driver.find_element_by_xpath('//*[@id="container"]/div[7]/div')
tbody = driver.find_element_by_xpath('//*[@id="container"]/div[7]/div')
rows = tbody.find_elements_by_tag_name('ul')
for index, value in enumerate(rows):
urls = value.find_elements_by_tag_name("a")
for url in urls:
if ("fm" or "fm4u") in url.get_attribute('href') :
programUrl.append(url.get_attribute('href'))
programTitle.append(url.get_attribute('text'))
else :
break
time = []
for i in programUrl:
driver.get(i)
time.append(driver.find_element_by_xpath('//*[@id="container"]/div[1]/div/ul/li[1]').text)
MBC_프로그램 = pd.DataFrame(data = list(zip(programUrl,programTitle,time)) , columns = ["programUrl","programTitle","programInfo"])
MBC_프로그램.to_csv("C:./MBC_Radio_편성표.csv", encoding = "euc-kr")
MBC_프로그램
programUrl | programTitle | programInfo | |
---|---|---|---|
0 | http://www.imbc.com/broad/radio/fm/idolstation... | IDOL STATION | 방송: 표준FM 매주 월-금 새벽 2시~3시 |
1 | http://www.imbc.com/broad/radio/fm/healthmorni... | 건강한 아침 황선숙입니다 | 방송: 표준FM 평일 오전 5시 5분(주말 5시) ~ 6시 |
2 | http://www.imbc.com/broad/radio/fm/gmnews/inde... | 아침&뉴스, 류수민입니다 | 방송: 표준FM 월~금 오전 6시15분 ~ 7시 |
3 | http://www.imbc.com/broad/radio/fm/look/index.... | 김종배의 시선집중 | 방송: 표준FM 평일 오전 7시05분 ~ 8시30분, 토요일 오전 7시 5분~8시 |
4 | http://www.imbc.com/broad/radio/fm/economy/ind... | 이진우의 손에 잡히는 경제 | 방송: 표준FM 평일 오전 8시30분~9시\n(플러스) 평일 오전 11시5분~11시... |
5 | http://www.imbc.com/broad/radio/fm/womenera/in... | 여성시대 양희은, 서경석입니다 | 방송: 표준FM 매일 오전 9시5분 ~ 11시 |
6 | http://www.imbc.com/broad/radio/fm/economy/ind... | 이진우의 손에 잡히는 경제 플러스 | 방송: 표준FM 평일 오전 8시30분~9시\n(플러스) 평일 오전 11시5분~11시... |
7 | http://www.imbc.com/broad/radio/fm/popular/ind... | 유행가, 시대를 노래하다 | 방송: 표준FM (본방송) 매일 오전 11시 52분~12시\n(스페셜) 일요일 오전... |
8 | http://www.imbc.com/broad/radio/fm/singlbungl/... | 정준하, 신지의 싱글벙글쇼 | 방송: 표준FM 평일 낮 12시20분(주말 12시10분)~2시 |
9 | http://www.imbc.com/broad/radio/fm/hurray/inde... | 박준형, 정경미의 2시 만세 | 방송: 표준FM 매일 오후 2시5분 ~ 4시 |
10 | http://www.imbc.com/broad/radio/fm/nowradio/in... | 정선희, 문천식의 지금은 라디오시대 | 방송: 표준FM 매일 오후 4시5분 ~ 6시 |
11 | http://www.imbc.com/broad/radio/fm/newshigh/ | 표창원의 뉴스 하이킥 | 방송: 표준FM 평일 저녁 6시5분 ~ 8시 |
12 | http://www.imbc.com/broad/radio/fm/wonderfulra... | 원더풀라디오 이석훈입니다 | 방송: 표준FM 평일 저녁 8시05분 ~ 10시 |
13 | http://www.imbc.com/broad/radio/fm/starnight/i... | 김이나의 별이 빛나는 밤에 | 방송: 표준FM 매일 밤 10시5분 ~ 12시 |
14 | http://www.imbc.com/broad/radio/fm/midnightcaf... | 서인의 심야다방 | 방송: 표준FM 매일 밤 12시 ~ 2시 |
15 | http://www.imbc.com/broad/radio/fm/nangman/ind... | 낭만가요 | 방송: 표준FM 매일 새벽 3시~4시 55분 | 올댓뮤직 본방송: 매일 아침 9시~... |
16 | http://www.imbc.com/broad/radio/fm/idolradio/i... | IDOL RADIO 시즌2 | 방송: 표준FM 매주 토,일 새벽 2시~3시, FM4U 매주 토,일 밤 12시~새벽 1시 |
17 | http://www.imbc.com/broad/radio/fm/rabook/inde... | 라디오 북클럽 김겨울입니다 | 방송: 표준FM 일요일 오전 6시 5분 ~ 7시 |
18 | http://www.imbc.com/broad/radio/fm/citytour//i... | 노중훈의 여행의 맛 | 방송: 표준FM 토요일 오전 6시5분 ~ 7시 |
19 | http://www.imbc.com/broad/radio/fm/popular/ind... | 유행가, 시대를 노래하다 스페셜 | 방송: 표준FM (본방송) 매일 오전 11시 52분~12시\n(스페셜) 일요일 오전... |
20 | http://www.imbc.com/broad/radio/fm/car/index.html | 권용주, 김나진의 차카차카 | 방송: 표준FM 매주 토,일 오전 8시 5분 ~ 9시 |
21 | http://www.imbc.com/broad/radio/fm/p_inssa/ind... | 정치인싸 | 방송: 표준FM 토,일 아침 11시05분 ~11시55분 |
22 | http://www.imbc.com/broad/radio/fm/weekhigh/in... | 주말하이킥 이윤석입니다 | 방송: 표준FM 토, 일 저녁 6시5분~8시 |
23 | http://www.imbc.com/broad/radio/fm/weekn/index... | 주말엔 나비인가봐 | 방송: 표준FM 토,일 저녁 8시5분~10시 |
24 | http://www.imbc.com/broad/radio/fm4u/worldmorn... | 세상을 여는 아침 김정현입니다 | 방송: FM4U 매일 아침 5시 ~ 7시 |
25 | http://www.imbc.com/broad/radio/fm4u/morningfm... | 굿모닝FM 장성규입니다 | 방송: FM4U 매일 아침 7시~9시 |
26 | http://www.imbc.com/broad/radio/fm4u/todaym/in... | 오늘 아침 정지영입니다 | 방송: FM4U 매일 아침 9시~11시 |
27 | http://www.imbc.com/broad/radio/fm4u/goldendis... | 김현철의 골든디스크 | 방송: FM4U 매일 오전 11시~12시 |
28 | http://www.imbc.com/broad/radio/fm4u/musicpart... | 정오의 희망곡 김신영입니다 | 방송: FM4U 매일 낮 12시~2시 |
29 | http://www.imbc.com/broad/radio/fm4u/date/inde... | 두시의 데이트 뮤지, 안영미입니다 | 방송: FM4U 매일 오후 2시~4시 |
30 | http://www.imbc.com/broad/radio/fm4u/discovery... | 오후의 발견 이지혜입니다 | 방송: FM4U 매일 오후 4시 ~ 6시 |
31 | http://www.imbc.com/broad/radio/fm4u/musiccamp... | 배철수의 음악캠프 | 방송: FM4U 매일 저녁 6시~8시 |
32 | http://www.imbc.com/broad/radio/fm4u/dream/ind... | 전효성의 꿈꾸는라디오 | 방송: FM4U 매일 저녁 8시 ~ 10시 |
33 | http://www.imbc.com/broad/radio/fm4u/bluenight... | 푸른밤, 옥상달빛입니다 | 방송: FM4U 매일 밤 10시 ~ 12시 |
34 | http://www.imbc.com/broad/radio/fm4u/bside/ind... | 배순탁의 B side | 방송: FM4U 매주 월-금 밤 12시 ~ 1시 |
35 | http://www.imbc.com/broad/radio/fm4u/justpop/i... | 신혜림의 JUST POP | 방송: FM4U 매일 새벽 1시 ~ 2시 |
36 | http://www.imbc.com/broad/radio/fm4u/moviemusi... | FM영화음악 김세윤입니다 | 방송: FM4U 매일 새벽 2시 ~ 3시 |
37 | http://www.imbc.com/broad/radio/fm4u/kpop2000/... | K팝2000 | 방송: FM4U 매일 새벽 3시 ~ 4시 55분 | 올댓뮤직 본방송: 매일 아침 7... |
38 | http://www.imbc.com/broad/radio/fm/idolradio/i... | IDOL RADIO 시즌2 | 방송: 표준FM 매주 토,일 새벽 2시~3시, FM4U 매주 토,일 밤 12시~새벽 1시 |
프로그램 구하기
import time
import re
driver = webdriver.Chrome('C:/Users/user/Downloads/chromedriver_win32/chromedriver')
weekdays_ = {0: "월", 1:"화", 2:"수", 3:"목", 4:"금", 5:"토", 6:"일"}
for k in range(34,39):
날짜 = []
곡명 = []
가수 = []
년 = []
월 = []
일 = []
요일 = []
프로그램명 = []
driver.get(MBC_프로그램["programUrl"][k])
go = 0
ul = driver.find_element_by_xpath('//*[@id="imbc_nav"]/ul')
lis = ul.find_elements_by_tag_name('li')
for index1, value1 in enumerate(lis):
urls = value1.find_elements_by_tag_name("a")
for url in urls:
if "선곡표" in url.get_attribute('text'):
go = url.get_attribute('href')
else:
pass
if go!= 0:
driver.get(go)
iframes = driver.find_elements_by_tag_name('iframe')
driver.switch_to_frame(iframes[1])
table = driver.find_element_by_xpath('//*[@id="musicWrap"]/div/table')
tbody = table.find_element_by_tag_name('tbody')
rows = tbody.find_elements_by_tag_name('tr')
rows[0].find_elements_by_tag_name("td")[1].click()
#driver.find_element_by_xpath('//*[@id="musicView"]/div[4]/div/a[2]/span[1]').click()
table = driver.find_element_by_xpath('//*[@id="musicWrap"]')
tbody = table.find_element_by_tag_name('tbody')
rows = tbody.find_elements_by_tag_name('tr')
for index, value in enumerate(rows):
try:
song = value.find_elements_by_tag_name("td")[1]
singer = value.find_elements_by_tag_name("td")[2]
곡명.append(song.text)
가수.append(singer.text)
날짜.append(driver.find_element_by_xpath('//*[@id="musicView"]/div[1]/div[1]').text)
except:
pass
driver.find_element_by_xpath('//*[@id="musicView"]/div[4]/div/a/span[1]').click()
while True:
time.sleep(2)
table = driver.find_element_by_xpath('//*[@id="musicWrap"]')
tbody = table.find_element_by_tag_name('tbody')
rows = tbody.find_elements_by_tag_name('tr')
for idx, values in enumerate(rows):
try:
song = values.find_elements_by_tag_name("td")[1]
singer = values.find_elements_by_tag_name("td")[2]
곡명.append(song.text)
가수.append(singer.text)
날짜.append(driver.find_element_by_xpath('//*[@id="musicView"]/div[1]/div[1]').text)
except:
pass
try:
try:
driver.find_element_by_xpath('//*[@id="musicView"]/div[4]/div/a[2]/span[1]').click()
except:
driver.find_element_by_xpath('//*[@id="musicView"]/s/div[3]/div/a[2]/span[1]').click()
except:
break
for j in range(len(날짜)):
날짜[j] = 날짜[j][-10:]
#날짜[j] = re.sub(r'[^0-9]', ' ', 날짜[j])
#날짜[j] = " ".join(날짜[j].split())
#날짜[j] = "-".join(날짜[j].split())
x = parse(날짜[j])
년.append(x.year)
월.append(x.month)
일.append(x.day)
요일.append(weekdays_[x.weekday()])
프로그램명.append(MBC_프로그램["programTitle"][k])
df = pd.DataFrame(data = list(zip(프로그램명,년,월,일,요일,곡명,가수)) , columns = ["프로그램명","년","월","일","요일","노래이름","가수이름"])
a = MBC_프로그램['programTitle'][k]
exec(f"df.to_csv('C:./{a}_선곡표.csv', encoding = 'euc-kr',index=False)")
else:
pass
<ipython-input-6-8822c6914901>:29: DeprecationWarning: use driver.switch_to.frame instead
driver.switch_to_frame(iframes[1])
Comments