本人正在点亮爬虫技能树,写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相关推荐

  1. Python爬取网易云音乐歌手歌曲和歌单(爬虫)

    Python爬取网易云音乐歌手歌曲和歌单 是 仅供学习参考 Python爬取网易云音乐网易云音乐歌手歌曲和歌单,并下载到本地 ①找到要下载歌手歌曲的链接,这里用的是: https://music.16 ...

  2. python爬虫No.1|爬取网易云音乐歌手的前50首歌曲ID及名字

    自学pythonのNo.5 引语 知识总结 Requests XPath 案例 曾经有这样的梗黑网易云音乐 实际上网易云是很不错的音乐软件之一.这个梗挺让我不舒服的,挫折谁都有,矫情没必要但对矫情之人 ...

  3. 利用Requests和BeautifulSoup爬取网易云音乐热歌榜

    一.爬虫代码 .from urllib import request from bs4 import BeautifulSoup import re import requests import ti ...

  4. python利用selenium爬取网易云入驻歌手id、歌手主页id、歌手姓名、歌手粉丝数量

    首先需要访问入驻歌手页,可以看到两个a结点中的链接,其中第一个链接为歌手主页,后面的数字是其主页id:第二个链接为歌手的信息主页,后面的数字为歌手id,通过第二个链接的访问可以查看歌手的粉丝数量 成功 ...

  5. 利用selenium爬取网易云音乐歌手歌曲信息并分析

    1.网页分析 网址:https://music.163.com/#/search/m/?s=许嵩&type=1 观察网页,所有的歌曲信息都在class="srchsongst&quo ...

  6. Python Scrapy 多线程爬取网易云音乐热门歌单信息(手把手教学)

    下面我将向大家介绍使用 Scrapy 爬虫获取 网易云音乐 的热门歌单信息. 这里是网易云音乐的歌单页面,可以看到歌单信息非常得结构化,是非常适合爬虫来爬取的. URL:全部歌单 - 歌单 - 网易云 ...

  7. java 爬虫音乐,Java爬取网易云音乐所有歌曲一:爬取所有歌手及其对应id

    使用jsoup包进行爬虫 org.jsoup jsoup 1.6.1 具体代码如下    下一篇:根据歌手Id获取所有专辑 package com.ssm.jsoup.music; import co ...

  8. python爬取网易云歌单_详解python selenium 爬取网易云音乐歌单名

    目标网站: 首先获取第一页的数据,这里关键要切换到iframe里 打印一下 获取剩下的页数,这里在点击下一页之前需要设置一个延迟,不然会报错. 结果: 一共37页,爬取完毕后关闭浏览器 完整代码: u ...

  9. 使用Selenium爬取网易云音乐的所有排行榜歌曲

    项目目标: 获取到一些简单的信息,排名,歌曲名称,时长,歌手,并且将歌曲下载下来 抓取分析: 在开始爬取之前需要确保已经安装好selenium,requests,lxml库,通过页面分析得到排行榜榜单 ...

最新文章

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

热门文章

  1. 手游运营需网络文化经营许可证?1000万资本金门槛
  2. php 实现倒计时-将秒数转换为时间(天、小时、分、秒)
  3. 分享 | 无监督视觉目标跟踪
  4. 服务器攻击后的善后工作
  5. 【9】核心易中期刊推荐——图像视觉与图形可视化
  6. 更改 IE 收藏夹 位置
  7. mysql stdistance_geometry和geography的区别
  8. 禁果效应在游戏剧情中会有什么样的作用
  9. ag-grid-angular
  10. 时间字符串解析(格式问题如2020-04-25T07:00:00+00:00)