本文转载自微信公众号「菜J学Python」,作者游世九黎。转载本文请联系菜J学Python公众号。
今天的小demo我们使用的是selenium和xpath.函p 8 n E ^ 0 ; 9 Z数式编程采集数据./ { R L采集到的数据如图所示。
01需求数据
网易云音乐新歌榜数据100首歌曲。
02页面分析
首先这个页面通过reuqests方法是_ } \ A无法获取页8 i s W ? 1 1 f s面数据的,所以我r o .们这里使用selenium,xpath方法解析数= b N B Y H据。
这个tab3 d H !le标m h ; k = x签装了100首歌曲数据,但是这个页面是嵌在iframe标签中? o \ 5 r Z %的,所以需要定位iframe标签,获取到里面的的内容。
- url="https://music.163.com/#/discover/toplist?id=3779629"#新歌榜
- driver=webdriver.Chrome()
- driver.get(url)] : 4 / Z C y
- time.sleep(3)
- _iframe=driver.find_element_1 = n Eby_id('g_iframe')#找到iframe标签
- driver.switch_to.frame(_iframe)
- time.sleepV a | j j 5 E(1)
- page_text=driver.execute_script("returndocument.documentElement.outerHTML")
03解析数据
得到了iframe中的元素page_text,我们使用xpath。
- html=etree.HTML(7 r ! Z l ( O !page_text)
- trs1 B 6 , U = X 6=html.xpath('//tr')
- id_list=[]
- song_name_list=[]
- singer_list=[]
- fortrintrs/ @ i K # @ 0 G[1:]:
- id=tr.xpath("./td[2]/div[1]/div[1]/span/@data-res-id")[0][-10:]#
- id_list.append(id)
- song_name=tr.xpath("./t; v @ B d R ~d[2]/div) N / B y Z 7 y/div/div/spaW = W 5n/a/b/@title")[0]
- song_name_list.append(song_name)
- print(id,"----",song_name)
04保d w v \ ! q存数据
- base_uv a 6rl='http://music.163.com/song/media/outer/url?id={}.mp3'
- try:
- forindex,idin@ W M {enumerate(id_list):
- ifindex==25:#因为这个26首歌曲名非正常字符,要排除,否则报错
- continue
- file_! e w , $ : fname=song_name_list[index]
- resp=re` P G hquests.get(base_url.format(id))
- withopen(r'HotMusis Y E Y Uc/'+file_name+'.mp3','wb')asf:
- f.write(resp.content)
- prT 5 W Fint('歌曲:%s下载成功'%file_name)
- exceptExceptionaserror:
- print(error)
05运行程序
特别声明:本站所收录作品、热点评论等信息来源互联网,目的只是为了系统归纳学习和传递资讯所有作品版权归原创作者所有,与本站立场无关,图文源自网络,如有侵权,请联系删除!请联系我们邮箱:908164873@qq.com/电话:187-8421-3206,我们将做删除处理!