fahaihappy

要说今年最火的综艺节目,兴风作浪……,哦,不对;小明历险记……,也不对,哎!算了,接着看吧……

数据

利用爬虫抓取了百度百科和维基百科上姐姐们的公开数据信息。两个网站均为静态的页面,只需要对相应HTML标签进行解析即可获取相应的数据。(更简单的方法也可以直接复制相应的表格信息到本地)

百度百科

百度百科页面解析

PS:仔细一瞧,百度百科上有些信息竟然是错的,比如陈松伶的初舞台评分。

宣传照

维基百科

维基百科页面解析

第一轮公演

维基百科数据可以跟百度百科互补一下,对于评分细节更细致许多。

视频弹幕

看着视频,按F12打开开发者工具,然后在network下就会有弹幕json数据包不断的向你扔过来了,在Headers栏可以查看json的路径。
https://bullet-ali.hitv.com/bullet/2020/06/30/224134/8766480/0.json
可以看出有日期,即爬取当天的弹幕数据,其余两个应该是节目id和视频id,x.json应该是按照节目的时间来定的,每60s一个数据包。

弹幕解析

还是采用之前项目使用的scrapy框架进行弹幕数据爬取,新建项目与爬虫文件。
scrapy startproject sisiter
cd sisiter
scrapy genspider danmu bullet-ali.hitv.com

构建数据Item

import scrapy
class DanmuItem(scrapy.Item):
    # define the fields for your item here like:
    # 视频id
    vid_id = scrapy.Field()
    # id
    danmu_id = scrapy.Field()
    # uname
    uname = scrapy.Field()
    # 内容
    content = scrapy.Field()
    # 时间
    danmu_time = scrapy.Field()
    # 点赞
    up_count = scrapy.Field()
    # 分钟
    danmu_minites = scrapy.Field()

编写爬虫解析代码

# -*- coding: utf-8 -*-
import scrapy
import json
from datetime import datetime
from sister.items import DanmuItem

class DanmuSpider(scrapy.Spider):
    name = \'danmu\'
    # allowed_domains = [\'bullet-ws.hitv.com\']
    start_urls = [\'https://bullet-ali.hitv.com\']
    date_str = datetime.now().strftime(\'%Y/%m/%d\')[:8] + str(datetime.now().day)# 当前时日期
    num1 = 112744 # 节目参数  7/3最新一期
    num2 = 8980904 # 视频参数

    def start_requests(self):
        base_url = \'https://bullet-ali.hitv.com/bullet/%s/%d/%d/%d.json\'
        for page in range(38):
            # 打印进度
            print(\'正在获取第{}页的信息\'.format(page))
            url = base_url % (self.date_str, self.num1, self.num2, page)
            yield scrapy.Request(url=url, meta={\'step\': page}, callback=self.parse)

    def parse(self, response):
        step = response.meta[\'step\']
        json_data = json.loads(response.body)
        # 获取数据
        all_data = json_data[\'data\'][\'items\']
        print(len(all_data))
        for data in all_data:
            danmu_item = DanmuItem()
            danmu_item[\'vid_id\'] = self.num2
            danmu_item[\'danmu_id\'] = data.get(\'id\')
            danmu_item[\'uname\'] = data.get(\'uname\')
            danmu_item[\'content\'] =data.get(\'content\')
            danmu_item[\'danmu_time\'] = data.get(\'time\')
            danmu_item[\'up_count\'] = data.get(\'v2_up_count\')
            danmu_item[\'danmu_minites\'] = step + 1
            yield danmu_item

保存数据pipeline

import pandas as pd

class SisterPipeline(object):
    def __init__(self):
        self.info_list = []

    def process_item(self, item, spider):
        self.info_list.append(item)
        return item

    def close_spider(self, spider):
        df = pd.DataFrame(self.info_list)
        df.to_csv(\'danmu_info.csv\', sep=\'\t\', encoding=\'utf-8\', index=False)

保存的数据就是这样婶儿的

可视化

整体

首先,看看姐姐们都来自哪里,可以看出节目组在姐姐们的选择上兼顾到了两岸三地,

而且在民族构成上,也包含了7位少数民族选手,比如“土家族之花”--沈梦辰。

年龄分布情况

职业分布情况

年龄与初评得分的关系很明显了

分类:

技术点:

相关文章:

  • 2021-08-14
  • 2021-11-13
  • 2021-10-07
  • 2021-12-08
  • 2021-10-02
  • 2021-11-30
  • 2021-09-11
猜你喜欢
  • 2021-09-02
  • 2021-11-30
  • 2021-04-14
  • 2021-06-10
  • 2021-08-06
  • 2022-01-10
  • 2021-08-29
相关资源
相似解决方案