成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python Selenium爬蟲實現歌曲免費下載

開發 后端
selnium是一款很強大的瀏覽器自動化測試框架,直接運行在瀏覽器端,模擬用戶操作,目前selenium支持包括IE,Firefox,Chrome等主流瀏覽器及PhantomJS之類的無頭瀏覽器,selenium+phantomjs也是現在很火的一個爬蟲框架。

[[207757]]

最近發現越來越多的歌曲下載都需要繳費了,對維護正版是好事。但有的時候也想鉆個空子,正好最近在學習python,隨手寫了一個建議爬蟲,用來爬取某播放軟件的在線音樂。

主要思路就是爬取播放頁里的播放源文件的url,程序可以讀取用戶輸入并返回歌單,,,因為在線網站包含大量js,requests就顯得很無奈,又懶得手動解析js,于是寄出selenium大殺器。

selnium是一款很強大的瀏覽器自動化測試框架,直接運行在瀏覽器端,模擬用戶操作,目前selenium支持包括IE,Firefox,Chrome等主流瀏覽器及PhantomJS之類的無頭瀏覽器,selenium+phantomjs也是現在很火的一個爬蟲框架。

代碼不長,做的有些簡陋,以后可以加個GUI。。。。

步驟一:

進入酷狗主頁,F12查看元素,,通過selenium.webdriver的send_keys()方法給send_input類傳參,即用作用戶的輸入,然后通webdriver.click()方法點擊搜索按鈕,得到搜索結果列表。這里會有一個js重定向,通過webdriver.current_ur就可以了,,切記一點!傳入的參數需要經過unicode編碼(.decode(‘gb18030′))效果一樣),否則如果有中文會亂碼。。(來自被深深困擾的我)

 

步驟二:

查看元素里每首歌的路徑,發現每首歌的路徑只有<li>不同,于是通過對li的迭代來獲取每一首歌的xpath,并輸出歌曲名字的元素,然后依舊通過webdriver的click()方法點擊歌曲鏈接,得到歌曲播放頁面,這里沒有什么難點,都是常規操作。需要注意的是,這里的歌曲鏈接也包含一個js的重定向,但不一樣的是瀏覽器會打開一個新的頁面(至少火狐會),可以在click()方法后通過webdriver.switch_to_window()方法跳轉到新打開的頁面

 

步驟三:

進入播放頁面后通過xpath找到播放源文件鏈接(強推firepath,xpath神器啊)但發現這里依然有一個js渲染,來生成播放源鏈接,直接提取<src>標簽會顯示為空,于是繼續webdriver,調用的瀏覽器會自動解析js腳本,解析完成后提取<src>得到歌曲鏈接,使用urllib的urlretrueve()下載即可

 

代碼如下:

  1. #coding=utf-8 
  2. from selenium.webdriver.remote.webelement import WebElement 
  3. from selenium import webdriver 
  4. from selenium.webdriver import ActionChains 
  5. from selenium.common.exceptions import NoSuchElementException 
  6. from selenium.common.exceptions import StaleElementReferenceException 
  7. from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 
  8. from selenium.webdriver.common.by import By 
  9. import time 
  10. import urllib 
  11.  
  12. #歌曲名 
  13. mname = '' 
  14.  
  15. #JS重定向 
  16. def wait(driver): 
  17.     elem = driver.find_element_by_tag_name('html'
  18.     count = 0 
  19.     while True
  20.         count += 1 
  21.         if count > 20: 
  22.             print('chao shi le'
  23.             return 
  24.         time.sleep(.5) 
  25.         try: 
  26.             elem == driver.find_element_by_tag_name('html'
  27.         except StaleElementReferenceException: 
  28.             return 
  29.  
  30. #獲取url 
  31. def geturl(): 
  32.     input_string = raw_input('>>>please input the search key:'
  33.     driver = webdriver.Chrome() 
  34.     url = 'http://www.kugou.com/' 
  35.     driver.get(url) 
  36.     a=driver.find_element_by_xpath('html/body/div[1]/div[1]/div[1]/div[1]/input') #輸入搜索內容 
  37.     a.send_keys(input_string.decode('gb18030')) 
  38.     driver.find_element_by_xpath('html/body/div[1]/div[1]/div[1]/div[1]/div/i').click() #點擊搜索 
  39.     result_url = driver.current_url 
  40.     driver.quit() 
  41.     return result_url 
  42.  
  43.  
  44. #顯示搜索結果 
  45. def show_results(url): 
  46.     driver = webdriver.Chrome() 
  47.     driver.get(url) 
  48.     time.sleep(3) 
  49.     for i in range(1,1000): 
  50.         try: 
  51.             print '%d. '%i + driver.find_element_by_xpath(".//*[@id='search_song']/div[2]/ul[2]/li[%d]/div[1]/a"%i).get_attribute('title')  #獲取歌曲名 
  52.         except NoSuchElementException as msg: 
  53.             break 
  54.     choice = input(">>>Which one do you want(you can input 'quit' to goback(帶引號)):"
  55.     if choice == 'quit':   #從下載界面退回 
  56.         result = 'quit' 
  57.     else
  58.         global mname 
  59.         mname = driver.find_element_by_xpath(".//*[@id='search_song']/div[2]/ul[2]/li[%d]/div[1]/a"%choice).get_attribute('title'
  60.         a = driver.find_element_by_xpath(".//*[@id='search_song']/div[2]/ul[2]/li[%d]/div[1]/a"%choice) 
  61.         actions = ActionChains(driver) 
  62.         actions.move_to_element(a) 
  63.         actions.click(a) 
  64.         actions.perform() 
  65.         #wait(driver) 
  66.         driver.switch_to_window(driver.window_handles[1])  #跳轉到新打開的頁面 
  67.         result = driver.find_element_by_xpath(".//*[@id='myAudio']").get_attribute('src') #獲取播放元文件url 
  68.         driver.quit() 
  69.     return result 
  70.  
  71.  
  72. #下載回調 
  73. def cbk(a, b, c): 
  74.     per = 100.0 * a * b / c   
  75.     if per > 100: 
  76.         per = 100 
  77.     print '%.2f%%' % per 
  78.      
  79.  
  80. def main(): 
  81.     print'***********************歡迎使用GREY音樂下載器********************************' 
  82.     print'                                                      directed by GreyyHawk' 
  83.     print'**************************************************************************' 
  84.     time.sleep(1) 
  85.     while True
  86.         url = geturl() 
  87.         result = show_results(url) 
  88.         if result == 'quit'
  89.             print'\n' 
  90.             continue 
  91.         else
  92.             local = 'd://%s.mp3'%mname 
  93.             print 'download start' 
  94.             time.sleep(1) 
  95.             urllib.urlretrieve(result, local, cbk) 
  96.             print 'finish downloading %s.mp3'%mname + '\n\n' 
  97.  
  98.  
  99.  
  100. if __name__ == '__main__'
  101.   main()    

效果: 

 

總結:

當網頁包含大量js的時候,selenium就會非常的方便,但經過實踐發現好像phantomjs解析js的效率沒有世紀瀏覽器的高,還會出錯,后來換成調用火狐就好了,,不知道為啥,,也許是臉黑吧,,總之selenium真的是一款非常強大的框架,對爬蟲有興趣的同學一定要了解一下。 

責任編輯:龐桂玉 來源: 36大數據
相關推薦

2021-04-16 08:02:05

Python下載音樂Python基礎

2013-09-05 13:52:17

QQ音樂

2025-04-22 09:39:46

Python爬蟲網頁數據抓取

2017-05-16 15:33:42

Python網絡爬蟲核心技術框架

2021-04-01 09:02:38

Python小說下載網絡爬蟲

2010-03-03 09:30:40

Python實現網頁爬

2021-03-30 09:21:09

PythonSeleniumPython爬蟲

2011-11-28 10:44:46

Office 2010下載

2025-04-23 08:35:00

2020-10-13 09:53:51

HarmonyOS入門下載

2024-04-30 09:33:00

JavaScriptPythonexecjs

2011-03-09 10:07:56

網絡爬蟲Java

2009-03-26 08:49:56

微軟Windows 7操作系統

2011-02-21 09:50:35

虛擬機VirtualB

2023-12-25 09:52:32

2017-08-09 15:27:33

python爬蟲開發工具

2012-05-10 13:42:26

Java網絡爬蟲

2019-04-23 10:18:44

微軟瀏覽器Windows

2011-02-24 11:11:14

2011-03-17 10:44:56

Windows 7
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美天堂| 国产毛片久久久 | 亚洲欧美中文日韩在线v日本 | 欧美精品一区二区三区在线 | 欧美日韩专区 | 日韩黄色av| 欧美一区 | 日本精品久久 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美一级二级三级视频 | 日韩精品中文字幕在线 | 久草在线影 | 婷婷综合 | 一区二区精品 | 亚洲 欧美 日韩在线 | 高清av在线| 国产激情偷乱视频一区二区三区 | 日韩午夜一区二区三区 | 国产在线观看一区二区三区 | 色综合天天综合网国产成人网 | 国内精品伊人久久久久网站 | 国产在线视频在线观看 | 日韩在线播放av | 欧美精品一区二区三区四区五区 | 国产特黄一级 | 日韩精品一区二区三区中文在线 | 久久成人免费视频 | 欧美日韩精品亚洲 | 日本精a在线观看 | 国产精品免费在线 | 亚洲永久精品国产 | 欧美手机在线 | 一区二区三区在线观看视频 | 亚洲精品久久久久avwww潮水 | 久在线 | 欧美性猛片aaaaaaa做受 | 狠狠操狠狠干 | 在线日韩av电影 | 亚洲网一区 | 日韩视频在线免费观看 | 伊人中文网|