用selenium和BeautifulSoup爬取网易云音乐歌手id
本人正在点亮爬虫技能树,写blog以记录
selenium和bs4介绍
Selenium 自动化测试工具。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试。换句话说叫 Selenium 支持这些浏览器驱动。
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
观察页面信息
我们爬取页面为网易云音乐的歌手界面,发现不同专栏的url对应的id参数不同,例如:
- https://music.163.com/#/discover/artist/cat?id=1001 华语男歌手
- https://music.163.com/#/discover/artist/cat?id=1002 华语女歌手
- …
在发现对应的每个专栏的A-Z索引对应的initial参数不同,例如: - https://music.163.com/#/discover/artist/cat?id=1001&initial=65 华语男歌手A索引
- https://music.163.com/#/discover/artist/cat?id=100ini1&initial=66 华语男歌手B索引
- …
从A-Z对应initial参数65-90
通过更改url后面的id参数和initial参数获得不同页面
def main():url = 'https://music.163.com/#/discover/artist/cat?id='items = [1001,1002,1003,2001,2002,2003,4001,4002,4003,6001,6002,6003,7001,7002,7003]initials = [-1] + [i for i in range(65,91)] #-1为热门索引for item in items:for initial in initials:new_url = url + str(item) + '&initial=' + str(initial)src = get_page(new_url)# print(src)singer_info = parse_html(src)
好!
主函数搞定,然后写get_page和parse_html方法
获取源代码
首先尝试过用webdriver直接获取网页源代码
driver = webdriver.Chrome('E:/code/scrapy/chromedriver.exe')#chromedriver路径driver.get(url)page_src = driver.page_source
发现拿到的page_src一点歌手信息都没有QAQ
然后发现歌手信息都在frame框架源代码中,用switch_to_frame转入框架再获取一遍
def get_page(url):chromeOptions = webdriver.ChromeOptions()chromeOptions.add_argument('headless')#设置headless参数,浏览器不弹出driver = webdriver.Chrome('E:/code/scrapy/chromedriver.exe',options = chromeOptions)driver.get(url)driver.switch_to.frame('g_iframe')page_src = driver.page_sourcedriver.close()return page_src
我拿到了这个网页的框架源代码,剩下的工作把歌手名字和歌手id从html中解析出来就可以了!
解析
<a href="/artist?id=1875" class="nm nm-icn f-thide s-fc0" title="阿信的音乐">阿信</a>
</li>
<li class="sml">
<a href="/artist?id=12441083" class="nm nm-icn f-thide s-fc0" title="傲日其愣的音乐">傲日其愣</a>
</li>
<li class="sml">
<a href="/artist?id=14469086" class="nm nm-icn f-thide s-fc0" title="阿金和玄子的音乐">阿金和玄子</a>
</li>
<li class="sml">
<a href="/artist?id=13222299" class="nm nm-icn f-thide s-fc0" title="安浩辰的音乐">安浩辰</a>
</li>
观察发现歌手信息都在一个class = “nm nm-icn f-thide s-fc0"的标签中
获取其文本内容可以的到singer_name
将 href 中的’/artist?id=’ 替换成”" 就可以获得singer_id
def parse_html(html):soup = BeautifulSoup(html,'lxml')for singer in soup.find_all('a',attrs={'class':'nm nm-icn f-thide s-fc0'}):singer_name = singer.stringsinger_id = singer['href'].replace('/artist?id=','').strip()# singer_info = [singer_id,singer_name]sql.insert_singer(singer_id, singer_name)#储存进数据库
写入mysql
存入数据库的方法(pymsql连接mysql):
用try,except 接收error,以免出现重复id的时候报错停止循环
import pymysql
db = pymysql.connect(host = 'localhost',#本地user = 'root',password = '123456',db = 'music163',cursorclass=pymysql.cursors.DictCursor
)
def insert_singer(singer_id, singer_name):with db.cursor() as cursor:sql = "INSERT INTO `artist`(`singer_id`,`singer_name`) VALUES (%s, %s)"try:cursor.execute(sql,(singer_id, singer_name))db.commit()except:db.rollback()
然后运行主函数就可以拉!
最后爬到了34167条歌手记录,因为访问次数较少,没有设置代理,若访问次数较多,建议设置代理池,必然容易被封ip。
Reference:
https://cuiqingcai.com/1052.html
https://github.com/NacedWang/163MusicSpider
https://github.com/zyingzhou/music163-spiders
用selenium和BeautifulSoup爬取网易云音乐歌手id相关推荐
- Python爬取网易云音乐歌手歌曲和歌单(爬虫)
Python爬取网易云音乐歌手歌曲和歌单 是 仅供学习参考 Python爬取网易云音乐网易云音乐歌手歌曲和歌单,并下载到本地 ①找到要下载歌手歌曲的链接,这里用的是: https://music.16 ...
- python爬虫No.1|爬取网易云音乐歌手的前50首歌曲ID及名字
自学pythonのNo.5 引语 知识总结 Requests XPath 案例 曾经有这样的梗黑网易云音乐 实际上网易云是很不错的音乐软件之一.这个梗挺让我不舒服的,挫折谁都有,矫情没必要但对矫情之人 ...
- 利用Requests和BeautifulSoup爬取网易云音乐热歌榜
一.爬虫代码 .from urllib import request from bs4 import BeautifulSoup import re import requests import ti ...
- python利用selenium爬取网易云入驻歌手id、歌手主页id、歌手姓名、歌手粉丝数量
首先需要访问入驻歌手页,可以看到两个a结点中的链接,其中第一个链接为歌手主页,后面的数字是其主页id:第二个链接为歌手的信息主页,后面的数字为歌手id,通过第二个链接的访问可以查看歌手的粉丝数量 成功 ...
- 利用selenium爬取网易云音乐歌手歌曲信息并分析
1.网页分析 网址:https://music.163.com/#/search/m/?s=许嵩&type=1 观察网页,所有的歌曲信息都在class="srchsongst&quo ...
- Python Scrapy 多线程爬取网易云音乐热门歌单信息(手把手教学)
下面我将向大家介绍使用 Scrapy 爬虫获取 网易云音乐 的热门歌单信息. 这里是网易云音乐的歌单页面,可以看到歌单信息非常得结构化,是非常适合爬虫来爬取的. URL:全部歌单 - 歌单 - 网易云 ...
- java 爬虫音乐,Java爬取网易云音乐所有歌曲一:爬取所有歌手及其对应id
使用jsoup包进行爬虫 org.jsoup jsoup 1.6.1 具体代码如下 下一篇:根据歌手Id获取所有专辑 package com.ssm.jsoup.music; import co ...
- python爬取网易云歌单_详解python selenium 爬取网易云音乐歌单名
目标网站: 首先获取第一页的数据,这里关键要切换到iframe里 打印一下 获取剩下的页数,这里在点击下一页之前需要设置一个延迟,不然会报错. 结果: 一共37页,爬取完毕后关闭浏览器 完整代码: u ...
- 使用Selenium爬取网易云音乐的所有排行榜歌曲
项目目标: 获取到一些简单的信息,排名,歌曲名称,时长,歌手,并且将歌曲下载下来 抓取分析: 在开始爬取之前需要确保已经安装好selenium,requests,lxml库,通过页面分析得到排行榜榜单 ...
最新文章
- 你用对锁了吗?浅谈 Java “锁” 事
- 如何将OpenCV中的Mat类绑定为OpenGL中的纹理
- python yield 详解
- 使用AMDU工具从无法MOUNT的DISKGROUP中抽取数据文件
- 蓝桥杯算法提高----2n皇后
- 【Java】Java中的设计模式的介绍以及代码详解
- 高可用的MongoDB集群
- Vc中对话框数据交换和验证机制
- 算法: 最大矩形面积85. Maximal Rectangle
- ckplayer ajax,旋风解析
- 慕课PDF下载扩展--再也不用担心慕课不给PDF了
- WizTree v4.03 最快的磁盘空间分析工具中文便携版
- impala常用函数大全(超详细哦)
- 利用Greenfoot制作简单的小游戏——记忆翻牌游戏(一)
- web安全day3:文件共享服务器配置、共享权限和445端口
- 8421 BCD码 加减校正
- POS Tagging 和Chunking (学习笔记)
- 如何生成多个互不重叠的不同半径圆(逻辑)
- 机器学习概述和特征工程
- Ubuntu(护眼设置)安装屏幕色温调节软件F.lux
热门文章
- 在H5移动端开发强制竖屏,横屏时提示
- Effective C++条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls)
- 寄存器(8086CPU)概述与作用
- 《英雄联盟》——召唤师峡谷模式 游戏设计元素分析
- java.nio.file.NoSuchFileException异常解决
- 【转载】BLE安全机制从入门到放弃
- 测试工程师刚入职如何快速熟悉需求并输出测试用例?
- safari浏览器在使用videojs-contrib-quality-levels.js 播放视频时 清晰度失效, 报错Unhandled Promise Rejection: AbortError
- HDU 5374 模拟俄罗斯方块
- 搞懂事件循环,面试不再害怕console输出问题。(自整)