50行代码实现爬取网易云歌单

2021年1月1更新:网易云的前端逻辑好像修改了,这个代码失效了。:(

需求分析

使用网易云的歌单URL:http://music.163.com/playlist?id=3233380300
获取歌单的详细信息,如:歌单作者,歌单名称,歌单内的歌曲

效果展示

image.png

步骤如下

先去看看歌单url 的详情,用浏览器打开网址http://music.163.com/playlist?id=3233380300
内容如下

image.png

按右键点击查看网页源代码,发现html内容都是JS加载的,所以不能直接用requests请求网页解析内容

image.png

回到歌单页,右键点击检查,选择network或者网络

image.png

点击红色按钮旁边的stop按钮

image.png

再刷新一遍网页(按快捷键:F5),等网页加载出来以后再点击红色按钮

image.png

上述三步操作,我们就完成了一次对网页的请求,并对网页的请求进行了抓包,下面的表格展示的就是我们请求获取的内容image.png
通过查看表格,我们可以找到一个文件名为playlist?id=

image.png

这个就是歌单的接口,我们点击这个文件

image.png

我们再浏览一下这个文件,看一下它的结构

image.png

发现就是这个文件,我们查看一下这个网页的请求结构

image.png
image.png

分析:
  1. 我们已经找到了歌单内容的URL
    image.png
  2. 我们用requests模拟浏览器去请求这个网页,就会得到Response里的内容
    image.png
  3. 最后解析获取到的网页内容,就可以了
准备部分:

先用pip安装requests,bs4,lxml 库
windows用户:windoows键+r输入cmd,回车
image.png
image.png
输入以下命令

pip install requests
pip install Beautifulsoup4 
pip install lmxl
代码部分:
import requests
from bs4 import BeautifulSoup as bs

# 这个函数用来请求网页,并返回网页的内容
def requests_html(url):
    # 我们增加一个headers,如果不加,网易云会认为我们是爬虫程序,从而拒绝我们的请求
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE',
    }
    # 利用requests模块请求网易云的歌单页面
    demo = requests.get(url, headers=headers)
    return  demo.content

# 解析html的内容
def parser_html(txt):
    soup = bs(txt, 'lxml')
    # u1标签包含所有歌曲信息
    u1 = soup.find('ul', class_="f-hide")
    # song_lists_name 是歌单名称
    song_lists_name = soup.find('h2', class_="f-ff2 f-brk").string
    # author_name 是歌单作者名称
    author_name = soup.find('a', class_="s-fc7").string
    # 对歌单信息遍历,
    li_list = u1.findAll('li')
    # 输出歌单,歌单作者
    print("歌单名称:",song_lists_name)
    print("歌单作者:",author_name)
    for i in li_list:
        a = i.find('a')
        # id是歌曲的id,保留下来我们以后有用
        id = a.get('href').split('=')[-1]
        # name是歌曲的名字
        name = a.get_text()
        string = id + ',' + name + '\n'
        # 输出每首歌的内容
        print("歌单内每首歌的信息:",string)

# url中的信息就是歌单链接,可以试试你自己的链接
url = 'https://music.163.com/playlist?id=3233380300'
# text里就是网页的内容了
text = requests_html(url)
# 把text里的内容交给parser_html函数解析
parser_html(text)
代码我就不详细说明了,重要的部分我已经注释,如果还有疑问请留言,欢迎交流,相互学习!
posted @ 2020-03-26 18:20  Adam_lxd  阅读(654)  评论(0编辑  收藏  举报