突破喜马拉雅sign签名反爬

喜马拉雅

网页分析


1

2

3

4

5

6

7

8

- 打开我们要爬取的音乐专辑https://www.ximalaya.com/ertong/424529/

- F12打开开发者工具

- 点击XHR 随便点击一首歌曲会看到存储所有歌曲的地址【json格式】

- 正常情况下我们直接用requests请求上面的地址就可以直接获取歌曲的所有信息<br>- 我们拿着上面获取的地址向浏览器发起请求,发现没有返回任何信息

- 我们查看请求头中的信息发现有一个xm-sign参数,值为加密后的字符串,就是这个参数使我们获取不到数据

- 31a0dbb5916dfe85d62d8fa5988efc43(36)1563537528652(26)1563537531252

- 后面的时间戳为服务器时间戳和系统当前时间戳,计算过期时间

- 我们分析出xm-sign参数的加密规则,每次请求都在headers加上我们自己生成的xm-sign参数即可

加密方式:
ximalaya-时间戳(sha1加密) + (100以内随机生成一个数) + 服务器时间 + (100以内随机生成一个数) + 系统当前时间

校验方式:
ximalaya-时间戳(sha1加密) + 服务器时间 

获取地址

请求地址

告诉我们没有标志,此时感觉我们在请求时少了点参数,去查看请求头

查看请求头

后端逻辑代码


1

2

3

4

5

- 下载安装node.js   https://nodejs.org/en/download/    安装方式:<a href="https://blog.csdn.net/cai454692590/article/details/86093297">https://blog.csdn.net/cai454692590/article/details/86093297</a>

- 获取服务器时间戳

- 调用js代码中的函数生成xm-sign参数

- 在headrs中加上生成的xm-sign参数像浏览器发起请求

- 获取数据进行持久化

js代码需要改的

目标地址:

加密方式:

代码实现

安装pyexecjs模块


1

pip install pyexecjs

猛击下载js代码

# -*- coding: utf-8 -*-
# @Time    : 2019/7/19 19:05
import requests
import os
import re
from bs4 import BeautifulSoup
import lxml
import json
import execjs   # 操作js代码的库

headers = {
    ‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36‘,
    ‘Accept‘: ‘text/html,application/xhtml+ xml,application/xml;q = 0.9,image/webp,image/apng,*/*;q=0.8, application/signe-exchange;v = b3‘,
    ‘Host‘: ‘www.ximalaya.com‘
}

‘‘‘爬取喜马拉雅服务器系统时间戳,用于生成xm-sign‘‘‘
def getxmtime():
    url="https://www.ximalaya.com/revision/time"
    response = requests.get(url, headers=headers)
    html = response.text
    return html

‘‘‘利用xmSign.js生成xm-sign‘‘‘
def exec_js():
    #获取喜马拉雅系统时间戳
    time = getxmtime()

    #读取同一路径下的js文件
    with open(‘xmSign.js‘,"r",encoding=‘utf-8‘) as f:
        js = f.read()

    # 通过compile命令转成一个js对象
    docjs = execjs.compile(js)
    # 调用js的function生成sign
    res = docjs.call(‘python‘,time)
    return res

"""获取专辑一共有多少页"""
def getPage():
    url = "https://www.ximalaya.com/ertong/424529/"
    html = requests.get(url,headers=headers).text
    # 创建BeautifulSoup对象
    suop = BeautifulSoup(html,‘lxml‘)  # 实例化对象,使用lxml进行解析
    # 根据属性获取 最大页码
    max_page = suop.find("input",placeholder="请输入页码").attrs["max"]
    return max_page

response_list = []
"""请求歌曲源地址"""
def gethtml():
    # 调用exec_js函数生成xm-sign
    xm_sign = exec_js()
    # 将生成的xm-sign添加到请求投中
    headers["xm-sign"] = xm_sign
    max_page = getPage()
    for page in range(1,int(max_page)+1):
        url = "https://www.ximalaya.com/revision/play/album?albumId=424529&pageNum={}&sort=1&pageSize=30".format(page)
        # 下载
        response= requests.get(url,headers=headers).text
        response = json.loads(response)
        response_list.append(response)

"""数据持久化"""
def write_data():
    # 请求歌曲地址拿到响应数据json
    gethtml()
    for res in response_list:
        data_list = res["data"]["tracksAudioPlay"]
        for data in data_list:
            trackName = data["trackName"] # 歌名
            trackCoverPath = data["trackCoverPath"] # 封面地址
            music_path = data["src"] # url
            print(trackName,trackCoverPath,music_path)
write_data()

下载音频

下载音频

原文地址:https://www.cnblogs.com/youxiu123/p/11624368.html

时间: 2024-10-19 08:02:09

突破喜马拉雅sign签名反爬的相关文章

那些年绕过的反爬手段

笔者第一份工作就是以java工程师的名义写爬虫,不得不说第一份工作很重要啊,现在除了爬虫不会干别的,到现在已经干了近5年了,期间经历了不少与反爬策略的斗争.最近又耗时两周成功搞定了某网站的反爬策略后,心里有点莫名的惆怅.今日无心工作,就总结下这些年与网站互怼的经验吧. 无反爬裸站 现在一个网站或多或少都会配置一定的反爬措施,毕竟现在一台笔记本的性能比某些小站的服务器都强,如果不加以限制,分分钟就能把你的资源耗尽.前两年的工商网站有个省份没有限制,没多久就把服务器抓瘫了(只能说服务器配置太太太次了

自定义类签发校验token-实现多方式登录-自定义反爬类-admin后台表管理字段自定义-群查接口-搜索-排序-分页

目录 复习 今日 签发token 校验token 案例:实现多方式登陆签发token 案例:自定义认证反爬规则的认证类 admin使用自定义User表:新增用户密码密文 群查接口各种筛选组件数据准备 drf搜索过滤组件 drf排序过滤组件 drf基础分页组件 复习 """ 频率组件:限制接口的访问频率 源码分析:初始化方法.判断是否有权限方法.计数等待时间方法 自定义频率组件: class MyThrottle(SimpleRateThrottle): scope = 'sm

JWT 认证 签发与校验token 多方式登陆 自定义认证规则反爬 admin密文显示

一 .认证方法比较 1.认证规则图 django 前后端不分离 csrf认证 drf 前后端分离 禁用csrf 2. 认证规则演变图 数据库session认证:低效 缓存认证:高效 jwt认证:高效 3. 认证比较 """ 1)session存储token,需要数据库参与,耗服务器资源.低效 2)缓存存token,需要缓存参与,高效,不易集群 3)客户端存token,服务器存签发与交易token的算法,高效,易集群 """ 缓存认证: 不易并发

Python3爬虫反反爬之搞定同程旅游加密参数 antitoken

一.前言简介 在现在各个网站使用的反爬措施中,使用 JavaScript 加密算是很常用的了,通常会使用 JavaScript 加密某个参数,例如 token 或者 sign.在这次的例子中,就采取了这种措施来反爬,使用 JavaScript 加密了一个参数 antitoken,而本篇博客要写的就是如何应对和解决的. 二.站点分析 本次爬取的站点链接为: https://www.ly.com/hotel/beijing53/?spm0=10002.2001.1.0.1.4.17. 等页面加载完毕

Python爬虫|深入请求(四)常见的反爬机制以及应对方法

作者:David Qian 链接:https://zhuanlan.zhihu.com/p/21558661 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 大家好!我是厦门大学王亚南经济研究院的大一学生,今天将由我来为大家介绍一下常见的反爬机制以及应对方法. 注:非商业转载注明作者即可,商业转载请联系作者授权并支付稿费.本人已授权"维权骑士"网站(http://rightknights.com)对我在知乎发布文章的版权侵权行为进行追究与维权. ---

第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略

第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-爬虫和反爬的对抗过程以及策略-scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scrapy架构源码分析图

请教淘宝API sign签名问题,望高人指点!谢谢!

  对淘宝API sign签名老计算不对 代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Security.Cryptography; namespace WindowsForms

爬虫与反爬

爬虫与反爬 (1) 基本的概念 爬虫: 自动获取网站数据的程序 关键是 定时,定量的,批量的获取 反爬虫: 使用技术手段 防止爬虫程序的方法 存在误伤,即 反爬技术 将普通用户识别为爬虫 如果误伤高 --- 效果再好也不能使用 例子: 比如 限制 ip === 用户的ip 一般都是 局域网内动态分配的, 一个爬虫的ip 可能分配给 另一个 非爬虫的用户 有效的方法: 可以在一段时间内 限制 ip,过一段时间 再把 ip释放 反爬的成本: 成功率越高成本越大,拦截率越高,误伤率越高 反爬虫的目的:

python解析字体反爬

爬取一些网站的信息时,偶尔会碰到这样一种情况:网页浏览显示是正常的,用python爬取下来是乱码,F12用开发者模式查看网页源代码也是乱码.这种一般是网站设置了字体反爬 一.58同城 用谷歌浏览器打开58同城:https://sz.58.com/chuzu/,按F12用开发者模式查看网页源代码,可以看到有些房屋出租标题和月租是乱码,但是在网页上浏览却显示是正常的. 用python爬取下来也是乱码: 回到网页上,右键查看网页源代码,搜索font-face关键字,可以看到一大串用base64加密的字