用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库,通过页面分析得到排行榜榜单 ...
最新文章
- golang并发编程goroutine+channel(一)
- 7.STM32中对DMA_Config()函数的理解(自定义)测试DMA传输数据时CPU还可继续工作其他的事
- leetcode —— 面试题 04.03. 特定深度节点链表
- WIN7系统程序放在中文文件夹打开报错及界面汉字变乱码
- 如何写出高性能的SQL语句,及如何进行SQL性能分析与调优
- 【剑指offer】62、圆圈中最后剩下的数字
- 大数据如何应用于食品追溯管理
- 使用Kibana工具测试elasticsearch数据
- 基于javaweb+SSM的药品管理系统(java+SSM+html+jQuery+Tomcat+mysql)
- 1.4_2 Axure RP 9 for mac 高保真原型图 - 案例1 【基础】模仿微信页面
- 机器学习基石 作业二
- 工业可视化三维建模数据3d可视化平台
- 小组取什么名字好_注册公司取什么名字好 八字起名大全
- 由浅入深 学习 Android Binder(十一) binder线程池
- 模仿猫眼电影App一个动画效果
- Unity游戏动画 从入门到住院:动画状态机
- 110配线架打法图解_【布线经验】110语音配线架详细安装教程(图文)
- CentOS_anydesk
- 用 Python 实现浪漫表白程序
- 量子计算机需要消耗什么能量,量子计算机的功效如何?