天天看點

Python爬去百度音樂

編譯器環境:Python3.6

代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

<code>#!/usr/bin/env python</code>

<code>#-*-coding=utf-8 -*-</code>

<code>#AUTHOR:duwentao</code>

<code>import</code>  <code>requests</code>

<code>import</code> <code>re</code>

<code>import</code> <code>json</code>

<code>def</code> <code>get_sids_by_name(name):</code>

<code>    </code><code>url </code><code>=</code> <code>'http://music.baidu.com/search'</code>

<code>    </code><code>data </code><code>=</code> <code>{</code>

<code>        </code><code>'key'</code><code>:name</code>

<code>    </code><code>}</code>

<code>    </code><code>reponse </code><code>=</code> <code>requests.get(url,params</code><code>=</code><code>data)</code>

<code>    </code><code>reponse.encoding</code><code>=</code><code>'utf-8'</code>

<code>    </code><code>html </code><code>=</code> <code>reponse.text</code>

<code>    </code><code>#print (html)</code>

<code>    </code><code>ul </code><code>=</code> <code>re.findall(r</code><code>'&lt;ul.*&lt;/ul&gt;'</code><code>, html, re.S)[</code><code>0</code><code>]</code>

<code>    </code><code>#print(ul)</code>

<code>    </code><code># 擷取sid sid&amp;quot;:551560464</code>

<code>    </code><code>sids </code><code>=</code> <code>re.findall(r</code><code>'sid&amp;quot;:(\d+),'</code><code>, ul, re.S)</code>

<code>    </code><code>return</code> <code>sids</code>

<code>def</code> <code>get_mp3_by_id(song_id):</code>

<code>    </code><code>song_id </code><code>=</code> <code>song_id</code>

<code>    </code><code>api </code><code>=</code><code>'http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.song.play&amp;format=jsonp&amp;callback=jQuery17205500581185420972_1513324047403&amp;songid=%s&amp;_=1513324048127'</code> <code>%</code> <code>song_id</code>

<code>    </code><code>response </code><code>=</code> <code>requests.get(api)</code>

<code>    </code><code>data </code><code>=</code> <code>response.text</code>

<code>    </code><code>data </code><code>=</code> <code>re.findall(r</code><code>'\((.*)\)'</code><code>, data)[</code><code>0</code><code>]</code>

<code>    </code><code>data </code><code>=</code> <code>json.loads(data)</code>

<code>    </code><code>title </code><code>=</code> <code>data[</code><code>'songinfo'</code><code>][</code><code>'title'</code><code>]</code>

<code>    </code><code>mp3_url </code><code>=</code> <code>data[</code><code>'bitrate'</code><code>][</code><code>'show_link'</code><code>]</code>

<code>    </code><code>mp3_data </code><code>=</code> <code>requests.get(mp3_url).content</code>

<code>    </code><code>with </code><code>open</code><code>(</code><code>'%s.mp3'</code> <code>%</code> <code>title,</code><code>'wb'</code><code>) as f:</code>

<code>        </code><code>f.write(mp3_data)</code>

<code>        </code><code>print</code> <code>(</code><code>"下載下傳完成"</code><code>)</code>

<code>        </code><code>f.close()</code>

<code>sid </code><code>=</code> <code>input</code><code>(</code><code>"請輸入歌手的名字:"</code><code>)</code>

<code>sids </code><code>=</code> <code>get_sids_by_name(sid)</code>

<code>for</code> <code>si </code><code>in</code> <code>sids:</code>

<code>    </code><code>print</code> <code>(</code><code>"正在下載下傳sid為"</code><code>,si)</code>

<code>    </code><code>get_mp3_by_id(si)</code>

執行結果:

微信公衆号:

本文轉自 天道酬勤VIP 51CTO部落格,原文連結:http://blog.51cto.com/tdcqvip/2053775