爬虫——爬取小音乐网站

爬虫有几部分功能???

1.发请求,获得网页源码 #1.和2是在一步的 发请求成功了之后就能直接获得网页源码

2.解析我们想要的数据

3.按照需求保存

注意:开始爬虫前,需要给其封装

复制代码
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
}

爬虫分析:

第一步:从列表页抓取详情页面的链接

正则表达式:

复制代码
<li\sclass="media\sthread\stap\s\s".*?>.*?<div\sclass="subject\sbreak-all">.*?<a\shref="(.*?)">(.*?)</a>

得到如下结果

从以上结果可以看出,此链接不可直接点击,缺少https://www.hifini.com/这一部分

复制代码
https://www.hifini.com/thread-20945.htm

因此如下处理

for i in result:

print(i)#元祖下标取值

href = "https://www.hifini.com/"+i[0]

name = i[1]

print(href)

print(name)

print('======================')

第二步:获取歌曲播放资源

找到歌曲url的xpath:

复制代码
music:\s\[.*?title:\s'(.*?)',.*?url:\s'(.*?)'

代码:

复制代码
#解析歌曲的播放组员
song_re = "music:\s\[.*?title:\s'(.*?)',.*?url:\s'(.*?)'"
r = re.findall(song_re,song_html_data,re.S)
# print('歌曲信息',r)
for i in r:
    song_name = i[0]
    song_link = "https://www.hifini.com/"+i[1]
    print('歌名:',song_name)
    print("歌曲播放资源链接",song_link)
    print('++++++++++++++++')

第三步:再次像歌曲播放资源链接发请求 获得二进制数据,进行保存

1.创建文件夹

复制代码
#保存歌曲 先创建一个文件夹 导入os模块
#判断文件是否存在
if not os.path.exists('歌曲'):
    os.makedirs("歌曲")

2.创建文件流,将歌曲保存在文件夹中

复制代码
with open('歌曲\{}.m4a'.format(song_name),'wb')as f:
    f.write(data_bytes)

代码:

import requests
import re
import os

shouye_url = 'https://www.hifini.com/'
# 1.起始目标
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
}
response = requests.get(shouye_url, headers=headers)
#1.发请求,获得网页源码
def get_data(url):
    response = requests.get(url,headers=headers)
    # print(response.status_code)
    # print(response.text)
    if response.status_code == 200:
        return response.text
#2.解析我们想要的数据
def parse_data(data):#形参站位 模拟的就是爬虫爬取下来的源码
    z ='<li\sclass="media\sthread\stap\s\s".*?>.*?<div\sclass="subject\sbreak-all">.*?<a\shref="(.*?)">(.*?)</a>'
    result = re.findall(z,data,re.S)
    # print(result)
    # https://www.hifini.com/thread-20945.htm
    for i in result:
        # print(i)#元祖下标取值
        href = "https://www.hifini.com/"+i[0]
        name = i[1]
        print(href)
        print(name)
        print('======================')
        get_song_link(href)
        #https://www.hifini.com/get_music.php?key=2Ydoqazb8E6jj+Nvl6rZLnuh3Fu1MRARle/srx5zQfZVMkPqsGrSzFHehon89oIENCUU19ru3GEJax60Ew
# 像详情页发请求 获得网页源码
def get_song_link(link):#link模拟的是详情页的url
    song_html_data = get_data(link)
    # print("详情页的网页源码",song_html_data)
    #解析歌曲的播放组员
    song_re = "music:\s\[.*?title:\s'(.*?)',.*?url:\s'(.*?)'"
    r = re.findall(song_re,song_html_data,re.S)
    # print('歌曲信息',r)
    for i in r:
        song_name = i[0]
        song_link = "https://www.hifini.com/"+i[1]
        print('歌名:',song_name)
        print("歌曲播放资源链接",song_link)
        print('++++++++++++++++')
        #再次像歌曲播放资源链接发请求 获得二进制数据
        data_bytes = requests.get(song_link,headers=headers).content
        # print(data_bytes)
        #保存歌曲 先创建一个文件夹 导入os模块
        #判断文件是否存在
        if not os.path.exists('歌曲'):
            os.makedirs("歌曲")
        with open('歌曲\{}.m4a'.format(song_name),'wb')as f:
            f.write(data_bytes)
#对应的功能写在不同的函数里面 如果需要互用功能 互相调用即可
if __name__ == '__main__':
    h = get_data(shouye_url)
    parse_data(h)

结果:

相关推荐
菜鸡中的奋斗鸡→挣扎鸡3 小时前
初始爬虫11
开发语言·爬虫·python
凡人的AI工具箱4 小时前
15分钟学 Python 第35天 :Python 爬虫入门(一)
开发语言·数据结构·人工智能·后端·爬虫·python
新缸中之脑4 小时前
ScrapeGraphAI 大模型增强的网络爬虫
爬虫
易辰君4 小时前
python爬虫 - 初识爬虫
开发语言·爬虫·python
人生の三重奏7 小时前
爬虫——同步与异步加载
爬虫·jsonpath·同步与异步·腾讯新闻
能摆一天是一天1 天前
Python 爬虫 根据ID获得UP视频信息
开发语言·爬虫·python·selenium
NPE~2 天前
爬虫入门 & Selenium使用
爬虫·python·selenium·测试工具·xpath
菜鸡中的奋斗鸡→挣扎鸡2 天前
初始爬虫10
爬虫
菜鸡中的奋斗鸡→挣扎鸡2 天前
初始爬虫9
爬虫