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

news2024/9/27 23:25:02

前言

网络爬虫(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)

项目效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1980946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:基础操作指令

Linux的操作特点&#xff1a;纯命令行&#xff08;虽然也有图形化界面&#xff0c;但主要是工程师使用&#xff0c;意义不大&#xff09; windows的操作特点&#xff1a;图形化界面&#xff08;也有纯命令行的形式&#xff0c;但其更贴近大众&#xff0c;命令行学习成本高&…

云浮23家公立医院齐上阵,引进绿葆取袋机共筑绿色防线

在粤北大地&#xff0c;一场以绿色生态为笔&#xff0c;高质量发展为墨的壮丽画卷正徐徐展开。云浮&#xff0c;这座历史悠久而又充满活力的城市&#xff0c;正以前所未有的决心与行动&#xff0c;向着打造粤北生态发展新高地的宏伟目标团结奋进。 近日&#xff0c;一项惠及民生…

android 源码导入android studio

1.在源码中生成android studio 环境 下载好全包源码后&#xff0c;在源码根目录执行以下四条命令&#xff1a; 1. "source build/envsetup.sh" (source可以用 . 代替&#xff0c;即". build/envsetup.sh") 2. "lunch"&#xff0c;并选择要编译的…

Python面试题汇总

Python面试题汇总 说明&#xff1a;下面的内容源于GitHub上名为interview_python的项目&#xff0c;对其内容进行了修订和补充。 [TOC] Python语言特性 1 Python的函数参数传递 看两个例子: a 1 def fun(a):a 2 fun(a) print a # 1 a [] def fun(a):a.append(1) fun(a…

不同专业方向如何在ChatGPT的帮助下完成选题

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 选择一个合适的论文题目是每个论文写作同学必须面对的重要任务。无论是历史专业、计算机科学专业&#xff0c;还是其他各个领域&#xff0c;找到一个既有研究价值又符合个人兴趣的选题往…

19.HTML总结

重点掌握表单的应用以及表单的初级验证 感谢您的观看&#xff0c;能和您一起学习是我最大的荣幸&#xff01; 参考学习资料&#xff1a;HTML总结——狂神说 下面是我的微信公众号&#xff0c;与csdn同步更新&#xff0c;有需要的朋友可以关注一波~

ChatGPT等生成式AI在个性化教育方案的应用

生成式AI在个性化教学方案生成中的应用 生成式人工智能&#xff08;Generative AI&#xff09;在个性化教学方案生成中的应用主要体现在其能够根据学生的学习习惯、能力和偏好&#xff0c;定制化生成教学内容和活动。这种技术可以帮助教师更有效地设计教学计划&#xff0c;同时…

SOMEIP_ETS_005:检查字节序

测试目的&#xff1a; 验证DUT在发送和接收参数时对字节序的处理能力。 描述 本测试用例旨在检验DUT在处理具有不同字节序的参数时&#xff0c;是否能够正确地发送和接收数据&#xff0c;并确保返回的UINT32值是传入的两个参数&#xff08;UINT8和UINT16&#xff09;的和。 …

Demo使用指南

Demo.exe讲解 1. Left、Right: 常规的左右相机视野&#xff1b; 与之相似的 2. Rectifiedright&#xff08;Rectifiedleft&#xff09;&#xff1a; 纠正畸变后的左右相机视野 通常使用广角镜头或鱼眼镜头时&#xff0c;由于其宽广的视角&#xff0c;图像边缘容易出现畸变&am…

eclipse启动配置,项目导入

1&#xff0c;设置eclipse jre 2&#xff0c;设置 tomcat Server 的jre为jdk1.7.0 80 如下图顺序设置 tomcat Server 的jre为jdk1.7.0_80 &#xff08;设置成你们自己的服务的jdk&#xff09; 3&#xff0c;设置项目 project facets 中的jdk&#xff0c;我的为1.7 在Package …

MATLAB指针式仪表自动读数系统设计

指针式仪表自动读数系统设计 摘要 随着模式识别技术、计算机技术等多种技术的不断完善和发展&#xff0c;机器视觉获得了巨大的进步与发展。目前在许多企业中&#xff0c;存在着大量的仪表&#xff0c;仪表的读数都要靠人来完成&#xff0c;工作量很大而且误差率相对来说比较…

优思学院|质量经理如何开展工作?

如果你本来是一个质量工程师&#xff0c;经过了多年的努力&#xff0c;终于成为质量经理&#xff0c;你或者会很困惑&#xff0c;我到底应该如何开展质量管理的工作呢&#xff1f;质量管理对于任何企业来说都是至关重要的&#xff0c;它不仅决定了产品的合格率和市场竞争力&…

DTCC 2024 | DBdoctor邀您参加第十五届中国数据库技术大会

第十五届中国数据库技术大会 8月22日-24日&#xff0c;2024年第十五届中国数据库技术大会&#xff08;DTCC2024&#xff09;将于北京举办。此次大会由IT168联合旗下ITPUB、ChinaUnix两大技术社区主办&#xff0c;以“自研创新 数智未来”为主题。作为顶级的数据库领域技术盛…

3_神经网络的搭建(二)

线性层和其它层的介绍 教学视频链接&#xff1a;神经网络-线性层及其他层介绍_哔哩哔哩_bilibili 正则化层&#xff08;Normalization Layers&#xff09; 在 torch.nn 中&#xff0c;Normalization Layers 主要用于对输入数据进行标准化或归一化&#xff0c;以帮助模型的训练…

让C盘清理不再深奥 竟然可以这么简单就清理干净了

让C盘清理不再深奥 竟然可以这么简单就清理干净了。C盘对很多人来说是很陌生的&#xff0c;这个并不奇怪&#xff0c;毕竟C盘确实太复杂&#xff0c;真的懂得C盘的结构的人并不多&#xff0c;如果要给C盘清理垃圾&#xff0c;那真的没多少个人可以做到靠手动去排查垃圾&#xf…

LeetCode 热题 HOT 100 (017/100)【宇宙最简单版】

【链表】No. 0148 排序链表【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xff…

PowerBi 瀑布图使用度量值

1. 假设我们有这样一张表。 销量表&#xff0c;第一列是销售月份&#xff0c;第二列到第四列&#xff0c;分别是西南&#xff0c;西北&#xff0c;东南三个地区的销量。 我们想要用瀑布图&#xff0c;X轴显示销售月份日期&#xff0c;细目显示三个地区&#xff0c;Y轴显示销量…

rke管理k8s节点的新增与删除

1 删除worker节点 # 查看节点名 kubectl get nodes # 标记节点不可调度 kubectl cordon worker8 # DaemonSet 确保集群中的所有&#xff08;或某些&#xff09;节点上都运行了一个 Pod 的副本 # 排空节点上的pod&#xff0c;确保该节点上的所有Pod都调度到其他节点 kubectl d…

【Android】通知的使用

使用通知 通知&#xff08;notification&#xff09;是Android系统中比较有特色的一个功能&#xff0c;当某个应用程序希望向用户发出一些提示信息&#xff0c;而该应用程序又不在前台运行时&#xff0c;就可以借助通知来实现。发出一条通知后&#xff0c;手机最上方的状态栏中…

三十种未授权访问漏洞复现 合集( 五 )

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷&#xff0c;导致其他用户可以直接访问&#xff0c;从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…