股市专辑播放列表

该博客介绍了如何使用Scrapy爬虫爬取喜马拉雅平台上的多个股票节目播放列表,如'今日股市(王斌)'、'老曹说股'、'老丁说股'等,并将数据存储到Excel文件中。爬虫首先获取每个专辑的第一页数据,然后根据总页数遍历所有页面,收集每页的作者、标题信息,并在爬虫关闭时生成报表。
摘要由CSDN通过智能技术生成

要求:
爬取网页内所有播放列表
今日股市(王斌)
老曹说股
老丁说股

在这里插入图片描述

import scrapy
from scrapy import Request, signals
import pandas as pd
from album.items import AlbumItem


class ExampleSpider(scrapy.Spider):
    name = 'example'

    def __init__(self, **kwargs):
        super(ExampleSpider, self).__init__(**kwargs)
        self.data = list()
        self.totalpage = 2
        self.user = [
            {
                'albumId': 2881558,
                'albumN': '今日股市(王斌)'
            },
            {
                'albumId': 4282711,
                'albumN': '老曹说股'
            },
            {
                'albumId': 4282711,
                'albumN': '老丁说股'
            }]


    def start_requests(self):
        for uu in self.user:
            dic= uu
            self.logger.info(f'dic{dic}')
            dic['page']=1
            url = f"https://www.ximalaya.com/revision/album/v1/getTracksList?albumId={dic['albumId']}&pageNum=1"
            yield Request(url, callback=self.parse, cb_kwargs=dic)


    def parse(self, response,**kwargs):
        lst=response.json()["data"]["tracks"]
        if kwargs["page"]==1:
            self.totalpage =response.json()["data"]["pageSize"]
        elif  kwargs['page']+1>self.totalpage :
            return

        for i in lst:
            id=i["trackId"]
            title=i["title"]
            name=kwargs["albumN"]
            item={
                "author": name,
                "title":title,
            }
            self.data.append(item)
        #减少函数耦合,范围代替传参 执行第一页的时候也可以执行
        for k in range(2,self.totalpage):
            kwargs["page"]=k
            url=f'https://www.ximalaya.com/revision/album/v1/getTracksList?albumId={kwargs["albumId"]}&pageNum={k}'
            yield Request(url=url, callback=self.parse, cb_kwargs=kwargs)

    @classmethod
    def from_crawler(cls, crawler, *args, **kwargs):
        spider = cls(**kwargs)
        spider._set_crawler(crawler)
        crawler.signals.connect(spider.spider_closed, signal=signals.spider_closed)
        return spider

    def spider_closed(self, spider):
        print(f'self.data{self.data}')
        self.logger.info(f'一共 {len(self.data)} 条数据')
        output = '喜马拉雅.xlsx'
        with pd.ExcelWriter(output) as writer:
            df_new = pd.DataFrame(self.data)
            df_new.to_excel(writer, sheet_name='data', index=False)
        spider.logger.info('生成报表成功: %s', output)

xpath的高级用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值