爬取bili番剧相关内容

我知道有些二次元肥仔就是喜欢看这些二次元东西,反正我是没看过,不知道你们怎么样呢?

今天就给大家分析一下他的视频列表页

首先呢,打开网页,借用开发者工具,检查分析,看一下网页源代码中有没有你想要的信息,有的话直接解析,没有的话点开网络,查看请求,根据关键字搜索,看一下请求返回的数据是什么样的。如果是json的话,直接向这个请求的url发起请求。

然后,将请求来的数据用json.loads()方法转成json数据

再根据key取出你要获取的数据。

最后将数据保存下来。

我获取的是前10页的数据,数据不多,仅供参考

在此给各位提个醒,爬虫需谨慎,最好挂个代理,以防被封

代码如下:

import csv
import json
import time

import requests


class Bili(object):
    def __init__(self):
        self.retry = 0
        self.page = 0
        self.html = ''
        self.url = 'https://api.bilibili.com/x/web-interface/newlist?pn=1&ps=20&_=1546868687676&rid=33&type=0&jsonp=jsonp'
        self.headers = {
            'Cookie': '你的cookie',
            'Host': 'api.bilibili.com',
            'Referer': 'https://www.bilibili.com/v/anime/serial/?spm_id_from=333.334.b_7072696d6172795f6d656e75.8',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',
            'Connection': 'keep-alive'
        }
        self.save_header()

    def save_header(self):
        """保存到csv中的表头"""
        headers = [['番剧名', '图片链接', '播放量', '弹幕量', '投稿时间']]
        with open('bili.csv', 'w', encoding='utf-8', newline='') as f:
            writer = csv.writer(f)
            writer.writerows(headers)

    def save_csv(self, data_list):
        """将数据保存到csv中"""
        with open('bili.csv', 'a', encoding='utf-8', newline='') as f:
            writer = csv.writer(f)
            writer.writerows(data_list)

    def get_html(self, url):
        """获取网页源码"""
        try:
            self.retry += 1
            response = requests.get(url, headers=self.headers)
            self.html = response.text
            # print(self.html)
        except Exception as e:
            if self.retry > 3:
                print(f'请求失败,正在尝试第{self.retry}次重新请求')
                time.sleep(3)
                return
            self.get_html(self.url)
        else:
            self.retry = 0

    def get_data(self):
        """获取数据"""
        data_list = []
        result = json.loads(self.html)
        datas = result["data"]["archives"]
        for d in datas:
            data = []
            data.append(d["title"])
            data.append(d["pic"])
            data.append(d["stat"]["view"])
            data.append(d["stat"]["danmaku"])
            # 创建时间
            time_local = time.localtime(d["ctime"])
            ctime = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
            data.append(ctime)
            data_list.append(data)
        self.save_csv(data_list)

    def run(self):
        for x in range(1, 11):
            time.sleep(2)
            print(f'正在爬取第{x}页数据,请稍后')
            url = f'https://api.bilibili.com/x/web-interface/newlist?pn={x}&ps=20&_=1546868687676&rid=33&type=0&jsonp=jsonp'
            self.get_html(url)
            self.get_data()


if __name__ == '__main__':
    bili = Bili()
    bili.run()


注:本文为原创,未经本人授权,禁止转载,交流可加群:872404578

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值