python網易雲音樂抓取


 

import threading
from selenium import webdriver
from collections import deque

songList =set([]);
playList =set([]);
#歌單
def chrome_browser_songList(url,browser):
    browser.get(url)
    play_count = browser.find_element_by_id('play-count').text
    if(int(play_count)>10000):
        data='\n'+browser.find_element_by_class_name('f-ff2').text+' 評論數:'+str(play_count)+'  地址:'+url
        save_file(data,'D:\\songList.txt')
    songQueue = deque()
    try:
        # a[href^=\/song]
        for each in browser.find_elements_by_css_selector('a[href^=\/song]'):
            try:
                print("歌曲名字: %s 地址 %s" % (each.text, each.get_property('href')))

                songQueue.append(each.get_property('href'))
            except:
                continue
    except:
        print('someerror')
    song_queue(songQueue,browser)
    #尋找歌單
    playListQueue = deque()
    try:
        for each in browser.find_elements_by_css_selector('a[href^=\/playlist]'):
            try:
                print("歌單: %s 地址 %s" % (each.text, each.get_property('href')))
                playListQueue.append(each.get_property('href'))
            except:
                continue
    except:
        print('someerror')
    browser.close()
    browser = webdriver.Chrome('C:\Program Files\Google\Chrome\Application\chromedriver.exe')
    play_list_queue(playListQueue,browser)
    #browser.close()
#歌曲
def chrome_browser_song(url):
    browser = webdriver.Chrome('C:\Program Files\Google\Chrome\Application\chromedriver.exe')
    browser.get(url)
    browser.switch_to_frame('g_iframe')

    comment_count = browser.find_element_by_id('cnt_comment_count').text
    if(int(comment_count)>10000):
        data = '\n歌曲名字:'+browser.find_element_by_class_name('f-ff2').text+' 歌手:'+browser.find_element_by_css_selector('a[href^=\/artist]').text+' 評論數:'+comment_count+' 歌曲地址:' +url;
        save_file(data,'D:\\song.txt')
    browser.close()
#保存文件
def save_file(data,file):
    save_path = file
    f_obj = open(save_path, 'a')
    f_obj.write(data)
    f_obj.close()
#歌隊列
def song_queue(songQueue,browser):

    while songQueue:

        current_url = songQueue.popleft()
        if current_url not in songList:
            songList.add(current_url)
            try:
                chrome_browser_song(current_url)
            except:
                continue
#歌單隊列
def play_list_queue(listQueue,browser):

    while listQueue:

        current_url = listQueue.popleft()
        if current_url not in playList:
            playList.add(current_url)
            try:
                chrome_browser_songList(current_url,browser)
            except:
                continue

url_list =[
           'http://music.163.com/playlist?id=598057191',
           'http://music.163.com/#/playlist?id=144236857',
           ]

def thread_1():
    url = url_list[0]
    browser = webdriver.Chrome('C:\Program Files\Google\Chrome\Application\chromedriver.exe')
    chrome_browser_songList(url, browser)
def thread_2():
    url = url_list[1]
    browser = webdriver.Chrome('C:\Program Files\Google\Chrome\Application\chromedriver.exe')
    chrome_browser_songList(url, browser)

#多線程
def thread_song():
    threads = []
    
    t1 = threading.Thread(target=thread_1)
    threads.append(t1)
    t2 = threading.Thread(target=thread_2)
    threads.append(t2)
    
    return threads
if __name__ == '__main__':
    # url = url_list[1]
    # browser = webdriver.Chrome('C:\Program Files\Google\Chrome\Application\chromedriver.exe')
    # chrome_browser_songList(url, browser)
    threads = thread_song()

    for t in threads:
        t.setDaemon(True)
        t.start()
    t.join()

因為沒有解決登陸問題,采用了一種比較笨的方法~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM