B站爬虫|B站旅游频道热门视频数据爬取与分析

代码概述

这段Python代码的主要目的是从Bilibili旅游频道获取热门视频数据。通过调用Bilibili API,我们可以获取视频的相关信息。代码将抓取的数据存储在一个Pandas DataFrame中,并将其输出为CSV文件。

这是 Bilibili 数据分析项目的一部分。

代码详解

设置请求头

这部分代码定义了请求头和生活区API接口的URL。其中,请求头用于伪装成浏览器发送请求,防止被B站识别为爬虫。API接口的URL是获取生活区视频数据的接口,可以通过修改接口参数来获取不同的数据。
注:需要改成你自己的COOKIE

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36',
    'Referer': 'https://www.bilibili.com/',
    'cookie': "YOUR COOKIE",
    'origin': 'https://www.bilibili.com'
}
api_url = 'https://api.bilibili.com/x/web-interface/web/channel/multiple/list?channel_id=6572&sort_type=hot&offset=%s&page_size=30'

获取频道内视频的bvid

这部分代码通过循环从API接口获取生活区视频的bvid,并存储到DataFrame中。

df = pd.DataFrame()
bvid_list = []
item_list = []
i = 0

offset = "865828963_1679311956"

while i <= 6000:

    page_url = api_url % offset

    response = requests.get(page_url, headers=headers)
    data = json.loads(response.text)

    offset = data['data']['offset']
    print(offset)
    # print(data)
    for item in data['data']['list']:

        # 将新行数据转换为一个DataFrame
        item_df = pd.DataFrame(item, index=[0])

        if i == 0:
            df = pd.concat([df, item_df], ignore_index=True)
            i += 1

        else:
            # 检查新行的'bvid'值是否与原始DataFrame中的任意一个'bvid'不同
            if item['bvid'] not in df['bvid'].values:
                # 如果不在,则将新行数据添加到原始DataFrame
                df = pd.concat([df, item_df], ignore_index=True)
                i += 1

注意事项

  1. 确保在请求头中设置合适的User-Agentcookie,以防止被B站识别为爬虫并拦截请求。同时,请遵守网站的爬虫政策,避免频繁请求。
  2. 在处理API返回的数据时,确保正确处理JSON数据,避免出现解析错误。
  3. 为了避免重复数据,代码会检查新抓取的视频bvid是否已存在于DataFrame中。如果已存在,则不会将新行数据添加到原始DataFrame。这样可以确保我们获取到的数据是唯一的。
  4. 在使用pd.concat()将新行数据添加到原始DataFrame时,请注意使用ignore_index=True,以便在合并后重置索引。
  5. 本代码示例中设置的视频获取数量为6000,您可以根据需求调整该值。但请注意,大量数据的抓取可能会导致请求过于频繁,从而触发网站的反爬机制。
  6. 代码最后将整个DataFrame输出为CSV文件。您可以根据需要更改输出文件名和路径。
df.to_csv('/Volumes/SSD/Data/getVideoid_new.csv')

总结

本文档介绍了如何使用Python代码从Bilibili旅游频道获取热门视频数据。我们详细讲解了代码的各个部分,包括设置请求头、获取频道内视频的bvid等。在使用此代码时,请注意遵守网站的爬虫政策,并注意处理JSON数据和DataFrame。最后,您可以将抓取到的数据保存为CSV文件,以便后续分析和处理。

Related Posts