本文转载自微信公众号「菜J学Python」,作者游世九黎。转载本文请联系菜J学Python公众号。
今天的小demo我们使用的是selenium和xpath.函w 0 T @数式编程采集数据.采集到的数据如图所示。
01需x J } _ 4 y c求数据
网易云音乐新歌榜数据100首歌{ @ [ 4 F S曲。
02页面分析
首先这个页面通过reuqests方法是无T k F法获取页面数据的,所以我们这里使用seleniuH p q %m,xpath方法解析数据。
这个ta. [ q m l Eble标签装了100首歌曲数– T b 5 B \ 5u % x r p ; \ J{ 5 ^ 3 } @据,但是这G w y }个页面是嵌在iframe标签中的,所以需要定位iframe标签,获取到里面的的内容\ 0 C 2 d。
-
- url=“httpsj 9 5 *://music.163.com/#/discover/toplist?id=3779629″#新歌}% 9 ` z @2 % ^ c _ r Y ~榜_ 0 h 9 * l – _ `
-
- driver=w/ K T W G * xebdriver.Chrome()
&n1 ~ K j v L ^bsp;
-
- driver.get(url)
-
- time.sleep(3)w O h R S R [
-
- _iframe=driver.find_element_by_iQ r Z K 6 Gd(u u 9 F Y L 1‘g_ifR h W :rame’)#找到iframe标X * f i 3 E i A签g I @ { i / 9
) e ~ Y
-
- driver.switch_to.frame(_if3 k ) ? w {rame){ / / + ]
y P M 9
-
- time.sleep(1)
&nbso ` Dp;
-
- page_text=driver.execute_script(“returndocument.documentElez * O V f ( M _ Cme, T 1 F ]nt.outV O : , z z \erHTML”)
3 u w W , Z
03解析数据
得到了iframe中的元素p$ a Jag$ \ ae_text,我们使用xpath。
-
- html=etree.HTML(page_textY m ! D ~ N k)
-
- trs=html.xpath(‘//tr’)
-
- id_list=[]
-
- songk ? y ^_name_list=\ r } 5 %[]
-
- singeO o R } { 4 :r_W T B N y! y B p z g = 9 ` Elist=[]
-
- fortrintrs[1:]:
&nbI y ` – % * D usp;
-
- id=tr.xpath(“2 ( ^ *./td[2]/div[1]/div[1]/span/@data-res-id”)[0][-10:]#
&n, d u W obsp;
-
- id_list.b I I g \ Q 9 W $append(id)
-
- song_name=t A 6 ! P \ e K Ntr.xpath(“./td[2]/div/div/div/span/a/b/@titleG I + F“)[0]
j \ \ 1 E a
-
- song_name_list.append(song_name)
-
- prinz 9 1t(id,“—-“,song_na] 2 : 8me)
04保存数据
-
- base_url=‘http:/: 7 \ D/music.163.com/song/media/outer/url?id={}.mp3′o f 6 x B y b
-
- try:
-
- forindex,z ( b , a m Eidinenumerate(id_lio hr X 4 H W jst):
-
- ifindex==25:#因为这个26首歌曲名非正常R 8 L , 8 g =字符,要排p N M x v B w .除,否则报错
-
- continue
-
- file_name=sj ) 3 l p c G Rong_name_list[index]
-
- resp; 9 W=requests.get(base_url.formaC l [ x lt(id))
-
- withopen(r‘HotMG l m 4 B u c |usic/’+file_name+‘.mp3’,‘wb_ 1 \ e X‘)asf:
M r D ( `
-
- f_ u e N \ r s *.write(resp.conten\ * } $ o . e I 5t)
-
- print(‘歌曲:%s下载成功’%file_n~ c % % r a ! v –ame)
-
- exceptExce1 V [ i @pP r r 0 ` = W Htionaserror:
-
- print(error)
05运行程序
特别声明:本站所收录作品、热点评论等信息来源互联网,目的只是为了系统归纳学习和传递资讯所有作品版权归原创作者所有,与本站立场无关,图文源自网络,如有侵权,请联系删除!请联系我们邮箱:908164873@qq.com/电话:187-8421-3206,我们将做删除处理!