欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

学习笔记:网络机器人6.0python爬取多类型音乐步骤详解

程序员文章站 2022-03-30 08:24:46
目标网址:酷狗音乐-谁伴我闯荡爬虫逻辑:【找到要获取特定音乐的url】>>>【找到该资源链接的url】>>>【封装获取音乐的函数】>>>【封装下载音乐的函数】注意:这两个获取url的顺序是和之前获取url的过程是反过来的,以往是获取外部页面的url后进入内部页面的url,然后再获取该页面的信息。但是下载音乐(定向爬取数据),首先是要确定获取音乐的url(通过浏览器输入后点击可以直接播放–内部页面数据),然后再找其上一层的url(资源链接的url...

目标网址:音乐-谁伴我闯荡
爬虫逻辑:
【找到要获取特定音乐的url】>>>【找到该资源链接的url】>>>【封装获取音乐的函数】>>>【封装下载音乐的函数】
注意:
这两个获取url的顺序是和之前获取url的过程是反过来的,以往是获取外部页面的url后进入内部页面的url,然后再获取该页面的信息。

但是下载音乐(定向爬取数据),首先是要确定获取音乐的url(通过浏览器输入后点击可以直接播放–内部页面数据),然后再找其上一层的url(资源链接的url–外部页面数据)

  1. 网页结构分析
    1) 找到所要获取音乐的url

在目标页面鼠标右键选择’检查’,右上方菜单栏点击’Network’,后进行网页刷新,接着查找右下区中php相关的文件,随后在’Preview’选项下点击’data’,查找到’play_url’,复制后面的内容使用浏览器打开后,就可以直接播放
2) 找到资源链接的ur
在上述的界面点击’Preview’旁边的’Headers’菜单栏,这时候发现’General’下的第一个信息就是资源链接的ur
3) 简化资源链接的url

通过上面的对比,可以发现,url里面的内容除了主站域名外,其他的几乎都是有可确定的字段拼接而成的,可以尝试将字段进行删减,比如先去掉最后的&_=1584364814789数据,看看网页是否返回数据,其次再往上一个字段的数据进行尝试,直到无法返回数据为止。通过测试发现,当把hash对应的数据删除后,网站不返回请求数据了。
2. 封装第一个函数
首先导入相关的库和设定相关的参数

import requests  # 导入网络请求模块
import time  # 导入时间模块
import math  # 导入数学模块
import re  # 导入正则表达式模块
import os  # 导入系统模块
import json  # 导入json模块
from bs4 import  BeautifulSoup  # 导入解析模块

1) url参数的设置
要爬取资源的url基础元素就是主站域名加上查找数据返回的文件信息(index.php?),其中data里面的数据(url基础元素后面的搜索参数),就是上一步测试简化url所对应的数据,因为测试到删除hash字段数据对应的网址不再返回页面数据信息,所以需要保留,那么hash之前的字段数据自然也需要保留了

url = 'https://wwwapi.kugou.com/yy/index.php?'

data = {
    'r': 'play/getdata',
    'callback': 'jQuery19102136161246377617_1594000626908',
    'hash': 'C4D1CD76ACC39FA12A53AD41C8E95A52'
}

其中关于’callback’参数里面的1594000626908数据,是一个时间计时,可以对应time库里面的.time方法。由此可以自己创造一个时间计时(代表着访问时间)

import time  # 导入时间模块
import math  # 导入数学模块

print(math.floor(time.time()*1000))   # 当前时间戳
print(1594000626908)

2) 请求头设定
User-Agent和Referer数据都可以在当前的页面进行找到,但是没有cookie信息
cookie信息的获取,可以随便的点击一个有关post请求信息的页面

dic_headers = {
   'User-Agent': 'xxx',
   'Referer': 'https://www.xxx'
}

3) 函数封装
① 初步封装获取返回的文本数据

import requests  # 导入网络请求模块
import time  # 导入时间模块
import math  # 导入数学模块
import re  # 导入正则表达式模块
import os  # 导入系统模块
import json  # 导入json模块
from bs4 import  BeautifulSoup  # 导入解析模块

def get_musci():  # 定义获取音乐函数
    url = 'https://xxx'  # 提取url

    data = {
        'r': 'play/getdata',
        'callback': 'jQuery19102136161246377617_{}'.format(math.floor(time.time()*1000)),
        'hash': 'C4D1CD76ACC39FA12A53AD41C8E95A52'
    }  # 反爬虫参数设置

    dic_headers = {
        'User-Agent': 'xxx',
        'Referer': 'https://www.xxx'
    }  # 定制请求头
    html = requests.get(url, params=data, headers=dic_headers)  # get请求,获取网页内容
    print(html.text)  # 转换为文本输出

get_musci()  # 调用函数

② 文本数据清洗转化为可识别类型数据
输出结果发现和之前获取腾讯新闻返回的结果有点类似,需要将数据转化为可识别的类型,然后进行程序导入,这里如果还按照数数的方法就有点效率低下了,使用.index的方法进行

本文地址:https://blog.csdn.net/weixin_42850424/article/details/107150554