1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > selenium切换iframe框架案例——翻页爬取网易云音乐歌单作者和名称

selenium切换iframe框架案例——翻页爬取网易云音乐歌单作者和名称

时间:2019-10-23 04:52:52

相关推荐

selenium切换iframe框架案例——翻页爬取网易云音乐歌单作者和名称

翻页爬取网易云音乐歌单作者和标题

案例目的:

通过翻页selenium操作网易云音乐,介绍如何切换iframe框架以及如何使用selenium定位数据所在的节点。

代码功能:

输入下载的数据页数,自动获取歌单中歌曲名称以及作者

找到目标的url:

右键检查,找到歌单中歌曲名称和作者所在的节点位置:

通过节点位置,我们可以得到数据的xpath语法:

但是,注意,我们需要的歌单名称和作者是在iframe框架的。意思也就是他们采用的是网页套网页的方式。

因此,我们需要切换到iframe框架下才能提取到目标数据。如下图:

最后,翻页操作:

方法一:通过定义"下一页"所在的节点,模拟点击,进行翻页

方法二:通过找到url的规律实现翻页

这里我们使用方法二,通过寻找url的规律实现翻页操作

对比前三页的url:

/#/discover/playlist/order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0/#/discover/playlist/order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=35/#/discover/playlist/order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=70

由上图,可得到url规律在于offset参数

分析完毕,上代码:

from selenium.webdriver import Chromeimport jsonif __name__ == '__main__':# 输入要爬取的页数pages = int(input('请输入要爬取的页数:'))# 创建浏览器对象(打开浏览器)chrome = Chrome()# 在网址栏输入目标的url打开网页song_list = []author_list = []for i in range(pages):offset = i*35chrome.get(f'/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset={offset}')# 注意:需要先切换框架chrome.switch_to.frame('g_iframe')# 通过xpath语法定位歌单名称和作者所在的位置nodes = chrome.find_elements_by_xpath('//ul[@id="m-pl-container"]/li')for node in nodes:song_name = node.find_element_by_xpath("./p[1]/a").textauthor_name = node.find_element_by_xpath("./p[2]/a").textsong_list.append(song_name)author_list.append(author_name)for i in range(len(song_list)):dict_ = {}dict_[song_list[i]] = author_list[i]# 将数据转换成json格式json_data = json.dumps(dict_,ensure_ascii=False)+',\n'# 将数据保存到本地with open('网易云歌单信息.json','a',encoding='utf-8')as f:f.write(json_data)

我爬取了两页(每一页对应35个数据)

执行结果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。