爬虫(Web Crawler)是一种自动化程序,用于遍历互联网上的网页并收集数据。它们的基本原理可以概括为以下几个关键步骤:

  1. 发送请求
    • 爬虫首先向目标网站的服务器发送HTTP请求。这些请求可以是GET请求或POST请求,具体取决于需要访问的资源类型和服务器要求。
  2. 接收响应
    • 服务器接收到请求后,会返回一个HTTP响应。这个响应中包含了请求的网页内容,通常是HTML文档,但也可能是JSON、XML或其他格式的数据。
  3. 解析内容
    • 爬虫接收到网页内容后,需要使用解析器(如BeautifulSoup、lxml、pyquery等)来解析HTML文档,提取出所需的信息。解析过程可能包括查找特定的标签、属性或文本内容。
  4. 存储数据
    • 提取出的数据可以存储在本地文件系统(如CSV、JSON、数据库文件等)或远程数据库中。存储方式的选择取决于数据的类型和规模,以及后续的数据处理需求。
  5. 链接提取与遍历
    • 在解析网页时,爬虫还会提取出页面中的其他链接(通常是<a>标签的href属性)。这些链接会被加入到一个待爬取的URL队列中,以便后续继续遍历。
    • 为了避免陷入无限循环或重复爬取,爬虫通常会使用一个去重机制(如集合、布隆过滤器等)来跟踪已经访问过的URL。
  6. 遵守规则与礼仪
    • 爬虫在爬取网站时,需要遵守网站的robots.txt文件规定。robots.txt文件是一个由网站管理员创建的文本文件,用于指示搜索引擎爬虫哪些页面可以访问,哪些页面不能访问。
    • 此外,爬虫还应该合理设置请求频率(如使用延迟机制),以避免对目标网站服务器造成过大的负载。
  7. 处理异常与错误
    • 在爬取过程中,爬虫可能会遇到各种异常和错误(如网络超时、404错误、500错误等)。因此,爬虫需要具备处理这些异常和错误的能力,以确保爬取过程的稳定性和可靠性。
  8. 更新与维护
    • 随着互联网的发展和网站结构的变化,爬虫需要不断更新和维护以适应新的变化。这可能包括更新解析规则、调整请求频率、优化存储方式等。

CSDN大礼包:《2024年最新全套学习资料包》免费分享

Part1 进行网页分析

首先打开网易云的网页版网易云
然后搜索你喜欢的歌手,这里我就搜陈奕迅,右键选择检查
在这里插入图片描述

选择一首歌曲找到这个首歌曲的数字ID,并进行复制
在这里插入图片描述
在众多数据中准确的去找到这一串数字
在这里插入图片描述

在浏览器上粘贴接口并附上那一串ID,点击回车键
在这里插入图片描述

最后你就可以轻松的听完这首歌啦
在这里插入图片描述

现在我把那个url贴出来

https://m10.music.126.net/20200715163315/a075d787d191f6729a517527d6064f59/ymusic/0552/0f0e/530f/28d03e94478dcc3e0479de4b61d224e9.mp3

Part2 更高级的

看到这里,你可能会想,为啥根本没用selenium模块呢?能不能直接爬取任何一首我想要的歌,而不用每首都去费心费力的找一个url呢?当然可以哒!
其实网易云在线播放每首歌曲时,都有一个外链地址,这是不会变的,跟每首歌的唯一一个id绑定在一起,每首歌audio文件的url如下:

url = 'https://music.163.com/artist?id=3684'

id值的获取也很简单,播放列表,上方会出现对应的网址,那里有id值,如下图:
在这里插入图片描述

所以只需把上面程序中的url改成新的url即可
在这里插入图片描述

程序目标是下载当前页面中所有的歌曲。
通过接口下载: 接口链接 + 歌曲ID

for music_label in music_label_list:
    # 从单个的音乐标签中筛选出ID信息
    href = music_label.xpath('./@href')[0]
    # print('href数据:', href)

    # 从ID信息中切割出ID的数字值
    music_id = href.split('=')[1]
    # print('ID数据:', music_id)

    # 判断字符串中是否是数字(如果是数字结果才为真)
    if music_id.isdigit():
        # 这是正确的歌曲ID
        print('ID数据:', music_id)

        # 提取出歌曲的名字
        music_name = music_label.xpath('./text()')[0]
        print('歌曲名字:', music_name)

        # 定义请求歌曲的链接
        music_url = 'http://music.163.com/song/media/outer/url?id=' + music_id

        # 发送网络请求获取歌曲数据
        response = requests.get(music_url, headers=headers)

        # 将歌曲数据保存到mp3文件中
        with open(f'./music/{music_name}.mp3', 'wb') as file:
            file.write(response.content)

        print(f'《{music_name}》下载成功。。。。。。')

        # 下载一首歌后延时1秒
        time.sleep(1)

爬音乐完整代码已做打包
完整源码和资料
扫描下方二维码免领取源码还有案例↓ ↓ ↓

 


最后,如果你对Python感兴趣的话。可以试试我整理的这一份全套Python学习资料!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、自动化测试带你从零基础系统性的学好Python!

👉[[CSDN大礼包:《python安装工具&全套学习资料》免费分享]]安全链接,放心点击

👉Python学习大礼包👈

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐