네트워크에서 텍스트와 이미지의 텍스트,뿐만 아니라 상업적 목적, 저자에 소유하여, 교환 내용, 질문이있는 경우, 치료를 위해 문의하시기 바랍니다.
PS : 필요한 파이썬 학습 자료는 작은 파트너에 추가 할 수 있다면 자신을 얻기 위해 아래 링크를 클릭
HTTP : // 참고. youdao. COM / noteshare ? ID = 3054 cce4add8a909e784ad934f956cef
음악은 현재의 음악을 많이 다운로드 할 수 없습니다 재생, 스왑 제품의 수명입니다. 우리 기술자의 출생, 어떻게 그것을 의지하고?
지식 포인트 :
-
요청
-
정규 표현식
개발 환경 :
-
버전 : anaconda5.2.0 (python3.6.5)
-
편집 : pycharm
타사 라이브러리 :
-
요청
-
꾸러미
웹 분석
대상 사이트 : http://music.taihe.com/search?key=%E9%99%88%E7%B2%92
음악의 실제 주소의 분석
첸 노래가 입자를 선택 피상적 인 사례 연구를
개발자 도구를 선택 네트워크를 열고 -> 미디어 -> 실제 주소의 음악을 얻을 수있는 페이지를 새로 고침
그러나 결과 주소가 소스 코드의 관점에서 읽을 수있다, 바이두의 음악은 확실히 숨길 수. 이 시간은 일반적으로 두 가지 사례를 가지고있다. 은 제 2 데이터가 숨겨져있는 암호화 된 자바 스크립트 또는 접합 접속 요청의 사용이다. 우리가 알고하지 않기 때문에 상황의 종류가있다. 그래서 우리는 천천히 데이터 요청을 분석 할 수 있습니다. 분석 후, 우리는 실제 주소가 API 내부의 음악에 존재 볼 수 있습니다 http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&callback=jQuery17206453751179783578_1544942124991&songid=243093242&from=web&_=1544942128336
并且我们请求这个 API 返回的是一个 json 数据(也就是python的字典数据类型)。只要我们使用字典的规则就能将我们的所有数据给提取到。
url拼接 获取所有数据
前面我们得到了音乐的真实地址,接下来我们就是分析真实地址的 url ,以期待得到下载所有音乐的诀窍。 仔细分析一下 url 就可以发现,?
后面的from
参数与_
即使不存在也不影响数据的请求。
并且后面的参数中的songid
其实就是歌曲的唯一id
,from
参数其实就是表明从哪个平台过来的
所以等一下我们下载音乐时,只要批量获取到歌曲的songid
就能将所有的歌曲给全部下载下来了。
批量获取singid
使用开发者工具,查看网页源码就能查看到songid
的位置,如果我们分析一个歌手页面的url
你会发现同样可以构造。
到此,整个网页分析就结束了。
实现效果
完整代码
1 import re 2 import requests 3 4 5 def get_songid(): 6 """获取音乐的songid""" 7 url = 'http://music.taihe.com/artist/2517' 8 response = requests.get(url=url) 9 html = response.text 10 sids = re.findall(r'href="/song/(\d+)"', html) 11 return sids 12 13 14 def get_music_url(songid): 15 """获取下载链接""" 16 api_url = f'http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&songid={songid}&from=web' 17 response = requests.get(api_url.format(songid=songid)) 18 data = response.json() 19 print(data) 20 try: 21 music_name = data['songinfo']['title'] 22 music_url = data['bitrate']['file_link'] 23 return music_name, music_url 24 except Exception as e: 25 print(e) 26 27 28 def download_music(music_name, music_url): 29 """下载音乐""" 30 response = requests.get(music_url) 31 content = response.content 32 save_file(music_name+'.mp3', content) 33 34 35 defSAVE_FILE (파일명, 콘텐츠) : 36 "" " 保存音乐" "" 37 오픈 (파일 이름 =, = 모드와 " WB " F 등) 38 f.write (콘텐츠) 39 40 41 경우 __name__ == " __main__ " : 42 대 song_id 에 get_songid () : 43 music_name, music_url = get_music_url (song_id) 44 download_music (music_name, music_url)