python爬虫——爬取喜马拉雅app

主要爬取喜马拉雅悬疑栏目的小说名字,演播者以及简介,先上爬取的数据图。
在这里插入图片描述
在这里插入图片描述

1. 此次抓取使用fiddler抓包,喜马拉雅的抓包很简单,这里就不多阐述。
在这里插入图片描述
通过对比两条的url可以发现只有ts-时间戳和pageId不同,其他的都没变化,因此可以知道,改变pageId就可以实现翻页。另外最上面的url是我去除一些不必要的参数,其没有影响。
2. 分析数据
在这里插入图片描述
小说是存储在列表当中的,所以需要先取出这个列表,再遍历获取小说的信息。

# 访问的url
url = 'http://mobile.ximalaya.com/mobile/discovery/v2/category/metadata/albums?categoryId=49&device=android' \
     '&keywordId=232&metadatas=&operator=2&pageId=1&pageSize=20&scale=1&version=6.5.87'
# 请求url获得返回的数据是json格式
resp = requests.get(url, headers=headers).json()
# 获取数据存储的列表
datas = resp.get('list')
# 判断列表是否不为空
if datas:
    for data in datas:
       # 声明一个字典存储数据
       data_dict = {}
       # 获取演播者的名字
       nickname = data.get('nickname')
       # 获取小说的名字
       title = data.get('title')
       # 获取小说简介
       trackTitle = data.get('trackTitle')

       data_dict['nickname'] = nickname
       data_dict['title'] = title
       data_dict['trackTitle'] = trackTitle
       print(data_dict)

3. 然后便是将数据保存,data_list是全局变量,详细请看后面的全代码

# 将数据保存为json文件
    with open('data_json.json', 'w', encoding='utf-8') as f:
        json.dump(data_list, f, ensure_ascii=False, indent=4)
    print('json文件保存成功')

    # 将数据保存为csv文件
    # 表头
    title = data_list[0].keys()
    with open('data_csv.csv', 'w', encoding='utf-8', newline='') as f:
        writer = csv.DictWriter(f, title)
        # 写入表头
        writer.writeheader()
        # 批量写入数据
        writer.writerows(data_list)
    print('csv文件保存成功')

4. 全部代码附上

import requests
import csv
import json


# 构建请求头
headers = {
    'Accept': '*/*',
    'user-agent': 'ting_6.5.87(HRY-AL00T,Android28)',
    'Host': 'mobwsa.ximalaya.com',
    'Connection': 'Keep-Alive',
    'Accept-Encoding': 'gzip'

}


# 声明一个列表存储字典
data_list = []


# 请求url并获取数据函数
def get_index():
    page = 1
    while True:
        # 访问的url
        url = 'http://mobile.ximalaya.com/mobile/discovery/v2/category/metadata/albums?categoryId=49&device=android' \
              '&keywordId=232&metadatas=&operator=2&pageId={}&pageSize=20&scale=1&version=6.5.87'.format(page)
        # 请求url获得返回的数据是json格式
        resp = requests.get(url, headers=headers).json()
        # 获取数据存储的列表
        datas = resp.get('list')
        if datas:
            get_info(datas)
        else:
            break
        page += 1


# 获取想要数据函数
def get_info(datas):

    for data in datas:
        # 声明一个字典存储数据
        data_dict = {}
        # 获取演播者的名字
        nickname = data.get('nickname')
        # 获取小说的名字
        title = data.get('title')
        # 获取小说简介
        trackTitle = data.get('trackTitle')

        data_dict['nickname'] = nickname
        data_dict['title'] = title
        data_dict['trackTitle'] = trackTitle

        data_list.append(data_dict)
        print(data_dict)


# 保存文件函数
def save_file():
    # 将数据保存为json文件
    with open('data_json.json', 'w', encoding='utf-8') as f:
        json.dump(data_list, f, ensure_ascii=False, indent=4)
    print('json文件保存成功')

    # 将数据保存为csv文件
    # 表头
    title = data_list[0].keys()
    with open('data_csv.csv', 'w', encoding='utf-8', newline='') as f:
        writer = csv.DictWriter(f, title)
        # 写入表头
        writer.writeheader()
        # 批量写入数据
        writer.writerows(data_list)
    print('csv文件保存成功')


def main():
    get_index()
    save_file()


if __name__ == '__main__':
    main()
  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值