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