Python 爬虫项目实战(一):爬取某云热歌榜歌曲

Python 爬虫项目实战(一):爬取某云热歌榜歌曲

前言

网络爬虫(Web Crawler),也称为网页蜘蛛(Web Spider)或网页机器人(Web Bot),是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓取等。

爬虫的基本原理

  1. 种子 URL:爬虫从一个或多个种子 URL 开始,这些 URL 是起点。
  2. 发送请求:爬虫向这些种子 URL 发送 HTTP 请求,通常是 GET 请求。
  3. 获取响应:服务器返回网页的 HTML 内容作为响应。
  4. 解析内容:爬虫解析 HTML 内容,提取所需的数据(如文本、链接、图片等)。
  5. 提取链接:从网页中提取出所有链接,并将这些链接加入待访问队列。
  6. 重复过程:爬虫重复上述步骤,直到达到某个停止条件,如爬取了一定数量的页面,或所有页面都被爬取完毕。

爬虫的分类

  1. 通用爬虫
    • 设计用于抓取整个互联网的大量网页。搜索引擎(如 Google、Bing)的爬虫就是通用爬虫。
  2. 聚焦爬虫
    • 专注于特定主题或领域,抓取相关网页。比如,一个新闻爬虫只抓取新闻网站的内容。
  3. 增量爬虫
    • 仅抓取自上次爬取以来发生变化或更新的网页,适用于动态内容更新频繁的网站。

爬虫的合法性和道德

在编写和运行爬虫时,必须遵循以下原则:

  1. 遵守网站的 robots.txt
    • 大多数网站都有一个 robots.txt 文件,规定了哪些页面允许被爬取,哪些不允许。爬虫应当尊重这些规则。
  2. 避免过度抓取
    • 设置适当的抓取频率,避免对服务器造成过大负担。
  3. 尊重版权和隐私
    • 不应抓取或使用受版权保护的内容,或涉及用户隐私的数据。
  4. 获取许可
    • 在某些情况下,最好获得网站管理员的许可,特别是当你打算频繁地抓取大量数据时。

通过以上方法和原则,可以编写高效、可靠且合规的网络爬虫来满足数据采集的需求。 

侦察

打开页面

F12 检查定位关键元素

在网络中刷新页面

搜索关键字

查看在页面中的渲染情况是不是我们想要的数据,可以看到这里列出了200首歌那么就是的

在标头中确定数据来源地址及请求方法

源代码

import re import os import requests filename = 'music\\' # 如果没有则创建文件夹 if not os.path.exists(filename): os.makedirs(filename) # 请求网址(如果想要爬取其他的榜单的歌曲内容,只需要改这个 url 即可) url = 'https://music.163.com/playlist?id=3778678' # 伪造请求头 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36' } # 发送请求 response = requests.get(url, headers=headers) # re.findall # 这个函数用于在字符串中查找所有与正则表达式模式匹配的部分,并返回一个包含所有匹配项的列表 # r 前缀表示这是一个原始字符串,其中的反斜杠不会被解释为转义字符 # (\d+): 捕获组,匹配一个或多个数字 # (.*?): 捕获组,非贪婪匹配任何字符(包括空字符),直到遇到 </a> html_data = re.findall(r'<li><a href="/song\?id=(\d+)">(.*?)</a>', response.text) # 正则表达式提取出来的一个内容返回是列表 里面每一个元素都是元组 for num_id, title in html_data: # 调用接口 music_url = f'https://music.163.com/song/media/outer/url?id={num_id}.mp3' # 发送请求获取二进制数据 music_content = requests.get(music_url, headers=headers) # 保存 with open('music\\' + title + '.mp3', 'wb') as f: f.write(music_content.content) print(num_id, title) 

项目效果

Read more

从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)

从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)

🔥海棠蚀omo:个人主页                 ❄️个人专栏:《初识数据结构》,《C++:从入门到实践》,《Linux:从零基础到实践》,《Linux网络:从不懂到不会》,《MySQL:新手入门指南》                 ✨追光的人,终会光芒万丈 博主简介: 目录 一.库的操作 1.1创建数据库 1.1.1编码集和校验集 1.1.2校验规则对数据库的影响 1.2操纵数据库 1.2.1查看数据库 1.2.2修改数据库 1.2.3删除数据库 1.3数据库的备份与恢复 二.表的操作 2.1创建表 2.2查看表结构 2.3修改表 2.3.1ADD操作

By Ne0inhk
基于Milvus与混合检索的云厂商文档智能问答系统:Java SpringBoot全栈实现

基于Milvus与混合检索的云厂商文档智能问答系统:Java SpringBoot全栈实现

基于Milvus与混合检索的云厂商文档智能问答系统:Java SpringBoot全栈实现 面对阿里云、腾讯云等厂商海量的产品文档、规格参数与价格清单,如何构建一个精准、高效的智能问答系统?本文将为你揭秘从技术选型到生产部署的完整方案。 云服务商的产品生态系统日益庞大,相关的技术文档、规格参数、定价清单等文档数量急剧增长。传统的文档查找方式已无法满足开发者和运维人员快速获取准确信息的需求。 基于检索增强生成(RAG)的智能问答系统成为解决这一难题的有效方案。本文将详细介绍如何使用 Java SpringBoot 和 Milvus 向量数据库,构建一个面向云厂商文档的高效混合检索问答系统。 一、核心挑战与架构选型 云厂商文档具有鲜明的技术特点,这些特点直接影响了我们的技术选择: 1. 高度结构化:包含大量技术规格表、价格矩阵和配置参数 2. 专业术语密集:如“ECS.g6.2xlarge”、“对象存储每秒请求数”等精确术语 3. 多格式混合:Markdown、PDF、Word、TXT等格式并存 4. 版本频繁更新:产品迭代快,文档需要及时同步

By Ne0inhk
一文通关 MySQL 数据类型,打好高性能数据库的第一战!

一文通关 MySQL 数据类型,打好高性能数据库的第一战!

🔥海棠蚀omo:个人主页                 ❄️个人专栏:《初识数据结构》,《C++:从入门到实践》,《Linux:从零基础到实践》,《Linux网络:从不懂到不会》,《MySQL:新手入门指南》                 ✨追光的人,终会光芒万丈 博主简介: 目录 一.数值类型 1.1tinyint类型 1.2bit类型 二.小数类型 2.1float类型 2.2decimal类型 三.字符串类型 3.1char类型 3.2varchar类型 3.3char和varchar的比较 四.日期和时间类型 五.enum和set 5.1查询set中的数据 前言: 在上一篇文章中,我们学习了库和表的相关操作,而在我们上一篇的讲解中,我们提到了在列名后面跟的是数据类型,但是对于MySQL中的数据类型我们现在还一知半解,那么今天这篇文章我们就来详细谈一谈MySQL中的数据类型。 那么在详细讲解每种数据类型之前,

By Ne0inhk
一键部署,告别下载烦恼:这款高颜值PHP内网软件库,让办公协作飞起来!-小散软件库

一键部署,告别下载烦恼:这款高颜值PHP内网软件库,让办公协作飞起来!-小散软件库

嗨,亲爱的伙伴们,我是走小散 在工作时,你是否遇到过这类情况: A同事用着不错的软件,但下载流程异常繁琐; B同事的办公软件版本过低,无法打开A同事的高版本文件。 别担心,只需请网络管理员为你们公司量身搭建一套专属的内部软件库,问题就能轻松解决! ‘ 环境说明 php8.3 mysql5.7 需要安装的PHP扩展 mbstring 权限 请给uploads文件夹配置755权限 上传大小 默认配置100G最大上传大小 php.ini(或面板里的 PHP 配置)建议至少设为: upload_max_filesize = 100G post_max_size = 100G(建议 ≥ 上传大小) 大文件上传时间长,可适当调大: max_execution_time = 36000(或更大,单位秒) max_input_time

By Ne0inhk