python3爬取咪咕音乐榜信息(附源代码)
2018-11-20 03:22:45来源:博客园 阅读 ()
参照上一篇爬虫小猪短租的思路https://www.cnblogs.com/aby321/p/9946831.html,继续熟悉基础爬虫方法,本次爬取的是咪咕音乐的排名
咪咕音乐榜首页http://music.migu.cn/v2/music/billboard/?_from=migu&page=1
注意:本程序有时候运行会报错,此时重新运行即可,报错原因不明了!
与小猪短租不同的是,爬取的排名信息不在每首歌曲的详细页面内,需要在分页url中获取(代码19-25行),使用打包循环并且输出给函数get_info()
1 """ 2 典型的分页型网站——咪咕音乐榜 3 有时候运行会报错,有时候正常,原因不知道 4 """ 5 import requests 6 from bs4 import BeautifulSoup as bs 7 import time 8 9 headers = { 10 'User-Agent':'User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 11 } 12 13 #获取每一个歌曲的网址,参数是分页url 14 def get_link(url): 15 html_data = requests.get(url, headers = headers) 16 soup = bs(html_data.text, 'lxml')#bs4推荐使用的的解析库 17 #print(soup.prettify()) #标准化输出url中的源代码(有可能跟网页查看中的不一致,网页中有可能标签书写不规范)以此为基础抓取,如果抓取失败,用此命令查看源代码 18 links = soup.select('#js_songlist > div > div.song-name > span > a')#注意循环点!!! 19 ranks = soup.select('#js_songlist > div > div.song-number ')#因为歌曲详情里没有排名信息,因此需要在这部分获取详情信息 20 #print(ranks) 21 for rank, link in zip(ranks,links):#打包循环,主要为了输出配套的rank和link 22 rank = rank.get_text() 23 link = 'http://music.migu.cn' + link.get('href')#观察每个歌曲的详细网页发现,前面部分需要手动添加http://music.migu.cn 24 #print(rank,link) 25 get_info(rank,link) 26 27 #获取每一个歌曲的详细信息,排名、歌名、歌手和专辑名,参数url是每个歌曲的网址 28 def get_info(rank,url): 29 html_data = requests.get(url, headers = headers) 30 soup = bs(html_data.text, 'lxml')#bs4推荐使用的的解析库 31 # print(soup.prettify()) #标准化输出url中的源代码(有可能跟网页查看中的不一致,网页中有可能标签书写不规范)以此为基础抓取,如果抓取失败,用此命令查看源代码 32 title = soup.select('div.container.pt50 > div.song-data > div.data-cont > div.song-name > span.song-name-text')[0].string.strip() 33 34 # 用网页copy过来的全部是“body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > h4 > em”,但是使用这个爬不出来数据(我也不知道why),把body去掉或者用下面最简短的方式(只使用最近的且唯一的div) 35 # title = soup.select('div.pho_info > h4 > em ') 36 # 查询结果title格式是一维列表,需要继续提取列表元素(一般就是[0]),列表元素是前后有标签需要继续提取标签内容,使用get_text()或者string 37 singer = soup.select('div.container.pt50 > div.song-data > div.data-cont > div.song-statistic > span > a')[0].string.strip() 38 cd = soup.select('div.container.pt50 > div.song-data > div.data-cont > div.style-like > div > span > a')[0].string.strip() # 获取标签的属性值 39 40 #将详细数据整理成字典格式 41 data = { 42 '排名':rank, 43 '歌名':title, 44 '歌手':singer, 45 '专辑':cd 46 } 47 print(data) 48 49 50 #程序主入口 51 if __name__=='__main__': 52 for number in range(1,3): 53 url = 'http://music.migu.cn/v2/music/billboard/?_from=migu&page={}'.format(number) #构造分页url(不是歌曲详情的url) 54 get_link(url) 55 time.sleep(1)
输出结果:每次输出data数据(字典型)字段顺序是随机的,因为本身字典型数据就没有顺序,如果想固定顺序的话请使用列表
举一反三:同类型的分页型网站均可使用此爬虫模板,例如豆瓣电影top100、时光网top榜之类的
ps:不知道这个榜单准不准,反正我基本没听过(可能是我out了)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:python技巧 is 和 ==
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 使用scrapy框架爬取全书网书籍信息。 2019-08-13
- python3 enum模块的应用 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash