Python 实战之 爬取酷狗音乐 Top500
Contents
学习Python有一段时间了,基础的语法过了一遍,也做了一些小例子,但总是感觉不能熟练的运用。为了巩固所学知识,增加实战经验,解锁更多知识点,本篇文章做了一次爬虫练习,通过具体的需求,明确爬虫的具体思路,掌握Python常用的数据结构,以此提高对Python学习的兴趣,加深基础知识的了解。
环境:
- OS:Windows7 x64
- IDE:PyCharm
- Python Version:3.6
- Browser:Google Chrome
建议安装Anaconda,它是一个开源的Python发行版本,里面包含了Python需要的许多依赖安装包,在导入模块的时候十分方面。
关于HTML的一些基础知识,在这里就不展开讲解了,你可以在W3school上学到,祝你好运!
实战中用于访问网络的模块Requests在这里也不展开讲解,你可以点击它阅读其文档,贵在坚持!
另外,用于解析HTML或XML文件数据的模块BeautifulSoup也不展开讲解,你可以自行翻阅文档,加油!
1.测试网页
在爬取网页数据之前,我们需要知道这个网站是否可以访问。判断其方法很简单,首先导入requests
模块,其次添加一个headers
告诉这个网站说,我们是通过浏览器访问的,然后再写上一个待会儿我们要爬取的网址url
,再次通过requests
的get
方法将该页面的HTML
信息保存到wb_data
中,我们可以用status_code
查看是否可以访问,如下所示:
|
|
输出结果如下:
|
|
返回200
就说明此网页可以访问。我们也可以使用print(wb_data.text)
来输出整个HTML
数据,如下图:
输出的东西很多,包括此url
下全部的HTML信息。
如何获取User-Agent?
打开网页后右击空白区域,选择检查
,点击上方的Network
后刷新网页,在左侧Name
栏中单击1-8888.html?from=rank
,在右侧的Request Headers
中可也以找到User-Agent
,我们将其复制过来即可,如下图:
2.分析网页
打开酷狗 http://www.kugou.com/yy/rank/home/1-8888.html?from=rank 后可以看到,在未登录的情况下,这一页共有22首歌曲。我们修改上面的连接,将其中的1
修改为2
,可以看到浏览器跳转到了第二页。再次将-8888
前面的数字改成23
即可看到最后一页排名500的歌曲,这些歌曲就是我们待会儿要爬取的东西。
爬取什么呢?
从上面的图片中可以看到,我们爬取的数据主要分三类:排名、歌手名与歌曲名、歌曲时间。
好了,需求知道了,现在就开始吧。
右击歌曲左边排名为1
的地方,点击检查
,如下图:
进来以后,可以看到1
在一对strong
标签中,我们可以通过它的上级标签span class="pc_temp_num"
来获取排名信息,如下图:
3.爬取数据
我们先导入BeautifulSoup
,用它来解析HTML数据。导入requests
用于发送网络请求,紧接着添加headers
和url
,利用requests.get()
将服务器响应的内容读取到wb_data
,再使用BeautifulSoup
将wb_data
中的数据返回一个对象到soup
,最后再用soup.select()
方法筛选歌曲的排行,如下所示:
|
|
输出结果如下:
你可以看到歌曲的排名被放在了一对strong
标签中,我们使用get_text()
方法可以获取到它的排名,用strip()
方法去除多余的空格,如下所示:
|
|
利用这种方法可以同样的获得歌手名与歌曲名、歌曲时间,如下所示:
|
|
输出结果如下:
|
|
这样我们就得到了一首歌曲的信息,然后将其放在for
循环中遍历整页的歌曲,(这里用到zip()
和字典
等知识)如下所示:
|
|
输出结果如下:
|
|
4.数据保存
在保存数据之前,我们首先声明一个total
列表,用append()
方法将每条数据添加到total
中,如下所示:
|
|
使用open
将爬取到的数据保存在文本文档中,如下所示:
|
|
5.整理代码
我们分别将数据爬取部分
和写入文本文档部分
整理成函数,如下所示:
|
|
6.总结
看完本篇文章后,你可以了解到爬虫的一般步骤:
- 抓取网页信息
- 筛选有用信息
- 保存数据信息
当然,本文还有一些关于爬虫需要注意的地方没有涉及到,这仅仅是一个简单的上手实例。我想,通过不断亲手实践,逐渐学习新方法、新思路,以此来加深对Python基础知识的了解,才是我们想要达到的目的。