本人正在点亮爬虫技能树,写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. 你用对锁了吗?浅谈 Java “锁” 事
  2. 如何将OpenCV中的Mat类绑定为OpenGL中的纹理
  3. python yield 详解
  4. 使用AMDU工具从无法MOUNT的DISKGROUP中抽取数据文件
  5. 蓝桥杯算法提高----2n皇后
  6. 【Java】Java中的设计模式的介绍以及代码详解
  7. 高可用的MongoDB集群
  8. Vc中对话框数据交换和验证机制
  9. 算法: 最大矩形面积85. Maximal Rectangle
  10. ckplayer ajax,旋风解析
  11. 慕课PDF下载扩展--再也不用担心慕课不给PDF了
  12. WizTree v4.03 最快的磁盘空间分析工具中文便携版
  13. impala常用函数大全(超详细哦)
  14. 利用Greenfoot制作简单的小游戏——记忆翻牌游戏(一)
  15. web安全day3:文件共享服务器配置、共享权限和445端口
  16. 8421 BCD码 加减校正
  17. POS Tagging 和Chunking (学习笔记)
  18. 如何生成多个互不重叠的不同半径圆(逻辑)
  19. 机器学习概述和特征工程
  20. Ubuntu(护眼设置)安装屏幕色温调节软件F.lux

热门文章

  1. 在H5移动端开发强制竖屏,横屏时提示
  2. Effective C++条款05:了解C++默默编写并调用哪些函数(Know what functions C++ silently writes and calls)
  3. 寄存器(8086CPU)概述与作用
  4. 《英雄联盟》——召唤师峡谷模式 游戏设计元素分析
  5. java.nio.file.NoSuchFileException异常解决
  6. 【转载】BLE安全机制从入门到放弃
  7. 测试工程师刚入职如何快速熟悉需求并输出测试用例?
  8. safari浏览器在使用videojs-contrib-quality-levels.js 播放视频时 清晰度失效, 报错Unhandled Promise Rejection: AbortError
  9. HDU 5374 模拟俄罗斯方块
  10. 搞懂事件循环,面试不再害怕console输出问题。(自整)