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

python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)

程序员文章站 2024-03-20 21:44:46
...

1. 先看效果图,随便抓的信息

python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)
python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)

2. 解析 ,fiddler抓包工具的配置大家自己百度吧,教程都很详细

3. 打开fiddler和模拟器,在模拟器打开哔哩哔哩软件,fiddler我是通过查找分析之后之后过滤的域名

python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)

4. 我们通过打开b站的相应版块,然后进行往下翻页之后,fiddler就会根据我之前选择过滤的域名给我标黑

python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)

5. 我们点开其中一条标黑的url,然后和b站软件的进行对比,发现我们需要的信息都可以抓取出来

python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)

6. 我们可以通过这两条url的对比,查找出不同的地方,经过我的测试,pn代表的是页码,后面红框打叉的地方我们可以不要,这样我们就可以实现翻页了

python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)

7. 需要注意的是我们需要无视ssl安全证书,也就是在requests那里加一个verify=False,这个很重要,不加的话就访问不了url的,返回的数据是json格式,所以大家都懂怎么操作了

python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)

8. 大家想要什么数据自己去找,当然其中的数据代表什么也需要大家自己去想了

python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)

9. 再说一下,翻页到什么时候就到底了呢,通过观察我发现,当到底部的时候,json数据里面的data为空,所以我们只要判断json里面的data是否为空做为判断是否到达底部

python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)python爬虫——爬取b站APP视频信息(通过fiddler抓包工具)

10. 完整代码附上

import requests
import json
import csv
import time

# 构建请求头
headers = {
    # 'Buvid': 'XZ512D1509193D98B13705F88F4266CFF9B32',
    'User-Agent': 'Mozilla/5.0 BiliDroid/5.40.0 (aaa@qq.com)',
    # 'Device-ID': 'Lk16QnVEfRt_TnxEOEQ4DDgNPQw9Dzo',
    'Host': 'app.biliapi.net',
    'Connection': 'Keep-Alive',
    # 'Accept-Encoding': 'gzip',

}

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


def start_spider():

    page = 1
    while True:
        time.sleep(1)
        url = 'https://app.biliapi.net/x/v2/region/show/child/list?appkey=1d8b6e7d45233436&build=5400000&channel=360' \
              '&mobi_app=android&order=view&platform=android&pn={}&ps=20&rid=33&tag_id=0'.format(page)
        page += 1
        resp = requests.get(url, headers=headers, verify=False)
        json_data = resp.json()

        # 先取出所需信息的键值对,下面是一个列表,列表存储的是我们所需要的信息
        datas = json_data.get('data')
        # 如果数据存在就抓取,否则就退出
        if datas:
            # 遍历
            for data in datas:
                # 标题
                title = data.get('title')
                # up主名字
                name = data.get('name')
                # 播放数
                play = data.get('play')
                # 评论数
                duration = data.get('duration')

                # 声明一个字典存储数据
                data_json = {}
                data_json['title'] = title
                data_json['name'] = name
                data_json['play'] = play
                data_json['duration'] = duration
                data_list.append(data_json)

                print(data_json)
        else:
            break


def main():

    start_spider()

    # 将数据写json文件
    with open('data_json.json', 'a+', encoding='utf-8-sig') as f:
        json.dump(data_list, f, ensure_ascii=False, indent=4)
    print('json文件写入完成')

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


if __name__ == '__main__':

    main()