当前位置: 首页 > 科技观察

使用Selenium批量下载100首网易云热歌排行榜音乐

时间:2023-03-17 14:32:33 科技观察

转载本文请联系蔡J学习Python公众号。对于今天的小演示,我们使用selenium和xpath。函数式编程收集数据。收集到的数据如图所示。01点播数据网易云音乐新歌榜数据100首。02页面分析首先,通过reuqests方法获取不到页面数据,所以我们这里使用selenium和xpath的方法来分析数据。这个表格标签包含了100首歌曲数据,但是这个页面是嵌入在iframe标签中的,所以需要定位到iframe标签才能获取到里面的内容。url="https://music.163.com/#/discover/toplist?id=3779629"#新歌列表driver=webdriver.Chrome()driver.get(url)time.sleep(3)_iframe=driver.find_element_by_id('g_iframe')#找到iframe标签driver.switch_to.frame(_iframe)time.sleep(1)page_text=driver.execute_script("returndocument.documentElement.outerHTML")03解析数据得到元素page_text中的iframe,我们使用xpath。html=etree.HTML(page_text)trs=html.xpath('//tr')id_list=[]song_name_list=[]singer_list=[]fortrintrs[1:]:id=t??r.xpath("./td[2]/div[1]/div[1]/span/@data-res-id")[0][-10:]#id_list.append(id)song_name=tr.xpath("./td[2]/div/div/div/span/a/b/@title")[0]song_name_list.append(song_name)print(id,"----",song_name)04保存数据base_url='http://music.163.com/song/media/outer/url?id={}.mp3'try:forindex,idinenumerate(id_list):ifindex==25:#因为26个歌名不是正常字符,应该排除,否则会报错continuefile_name=song_name_list[index]resp=requests.get(base_url.format(id))withopen(r'HotMusic/'+file_name+'.mp3','wb')asf:f.write(resp.content)print('歌曲:%s下载成功'%file_name)exceptExceptionaerror:print(error)05运行程序