哪家做網(wǎng)站比較好店鋪引流的30種方法
今天我就來分享一下我的方法:Python爬蟲
在CS dn社區(qū)中我瀏覽了許多關(guān)于爬蟲代碼,可都有各自的缺陷,有的需要ID比較麻煩,這里我編寫了一個(gè)程序,他只需要輸入歌曲名字即可進(jìn)行搜索爬取并下載
話不多說,下面的程序復(fù)制下來吧,如果你覺得好用,創(chuàng)作不易,就關(guān)注一下我,點(diǎn)個(gè)贊,加個(gè)收藏吧!
記住,一定要等到程序,全部運(yùn)行完畢,不要急著停止去聽,否則文件可能破損,聽不了!
展示Python代碼
from lxml import etree
import requests
import json
from concurrent.futures import ThreadPoolExecutor# 創(chuàng)建線程池
pool = ThreadPoolExecutor(max_workers=10)
# 請(qǐng)求頭信息
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
}
def download(id, name):# 構(gòu)造下載鏈接url = f'http://music.163.com/song/media/outer/url?id={id}'# 發(fā)送下載請(qǐng)求response = requests.get(url=url, headers=headers).content# 將響應(yīng)內(nèi)容寫入文件with open(name+'.mp3', 'wb') as f:f.write(response)# 打印下載完成消息print(name, '下載完成')
def get_id(url):# 發(fā)送請(qǐng)求獲取頁面內(nèi)容response = requests.get(url=url, headers=headers).text# 使用XPath解析頁面page_html = etree.HTML(response)# 提取歌曲列表信息id_list = page_html.xpath('//textarea[@id="song-list-pre-data"]/text()')[0]# 解析歌曲列表信息,并逐個(gè)提交下載任務(wù)到線程池for i in json.loads(id_list):name = i['name']id = i['id']author = i['artists'][0]['name']pool.submit(download, id, name+'-'+author)# 關(guān)閉線程池pool.shutdown()
if __name__ == '__main__':# 用戶輸入歌曲關(guān)鍵詞keyword = input("請(qǐng)輸入歌曲名稱:")# 構(gòu)造搜索URLsearch_url = f'https://music.163.com/api/search/get/web?csrf_token=hlpretag=&hlposttag=&s={keyword}&type=1&offset=0&total=true&limit=5'# 發(fā)送搜索請(qǐng)求并獲取響應(yīng)內(nèi)容response = requests.get(url=search_url, headers=headers).json()# 提取歌曲列表song_list = response['result']['songs']# 遍歷歌曲列表,逐個(gè)提交下載任務(wù)到線程池for song in song_list:name = song['name']id = song['id']author = song['artists'][0]['name']pool.submit(download, id, name+'-'+author)# 關(guān)閉線程池pool.shutdown()
快去試試吧!只要輸入你想爬取的歌名即可!