申明:本文对爬取的数据仅做学习使用,不涉及任何商业活动,侵删

简述

本次爬取目标是:

  1. 番剧的基本信息(名字, 类型, 集数, 连载or完结, 链接等)
  2. 番剧的参数信息(播放量, 点赞, 投币, 追番人数等)
  3. 时间信息(开播时间, 完结时间)

前提条件

  1. 编程语言: Python 3
  2. 爬虫框架: Scrapy 1.6.0
  3. 编译器: Pycharm
  4. 平台: Windows

Scrapy安装参考文档:windows / linux

一丶页面分析

番剧索引页展示的番剧信息属于动态渲染, 因此要通过获取页面响应来得到我们想要的数据, 按F12到Network中找我们需要的响应数据:

来分析一下Request URL, 先无事其他的参数, 来看我们最需要的一部分: page=1&...&pagesize=20

  • page:表示当前页码
  • pagesize:表示页面展示的番剧数

可以尝试访问Request URL, 来确认可以拿到我们需要的数据:

这一个请求并不能满足需求, 跟进番剧页链接, 并继续找响应数据:


几乎所有的数据都被我们得到了, 但唯独缺一个番剧类型
跟进番剧简介网址:https://www.bilibili.com/bangumi/media/md102392, 这是一个静态页面, 可以直接从响应中获取到我们需要的信息:

完成可数据源的分析, 接下来开始写代码

二丶创建爬虫

  1. 打开cmd控制台,然后cd+路径,移动到到期望的目录中,使用命令创建项目 scrapy startproject bilibili_spider,bilibili_spider为项目名称,创建完成后会自动生成下列文件:

    • bilibili_spider

      • __init__.py
      • scrapy.cfg #项目部署的配置文件
      • bilibili_spider #项目目录, 包含了项目运行相关的文件
        • __init__.py
        • items.py #项目的目标文件
        • middlewares.py #项目的中间件文件
        • pipelines.py #项目的管道文件
        • settings.py #项目的设置文件
        • spiders #项目的爬虫目录
          • __init__.py
  2. 创建爬虫文件,到bilibili_spider\bilibili_spider\spiders目录下,运行命令:scrapy genspider bilibili bilibili.com,bilibili是爬虫文件的名称,后面是目标网站的域名, 由于本次爬取涉及的站点较多, 这里可以将www省略掉, 以避免出错

items.py

进入items.py文件中设置爬取的目标,基于python之禅简单生于复杂, 我将上述最后两次请求合并到一个, 即从番剧详情页获取评论数和评分

import scrapyclass BilibiliSpiderItem(scrapy.Item):# 索引页的ajax 可以获得以下信息:season_id = scrapy.Field()      # 番剧编号media_id = scrapy.Field()       # 媒体编号title = scrapy.Field()          # 标题index_show = scrapy.Field()     # 集数is_finish = scrapy.Field()      # 是否完结video_link = scrapy.Field()     # 链接cover = scrapy.Field()          # 封面图pub_real_time = scrapy.Field()  # 真实发布日期renewal_time = scrapy.Field()   # 最近更新日期# 番剧信息的ajax请求:favorites = scrapy.Field()      # 追番coins = scrapy.Field()          # 硬币views = scrapy.Field()          # 播放量danmakus = scrapy.Field()       # 弹幕# 番剧详情页的ajax请求:cm_count = scrapy.Field()       # 评论数score = scrapy.Field()          # 评分media_tags = scrapy.Field()     # 类型标签

爬虫文件

# -*- coding: utf-8 -*-
import json
from datetime import datetime
import scrapy
from scrapy.spiders import CrawlSpider
from bilibili_video.items import BilibiliSpiderItemclass BilibiliSpider(CrawlSpider):name = 'bilibili'allowed_domains = ['bilibili.com']# 索引页的ajaxrequest_url = 'https://bangumi.bilibili.com/media/web_api/search/result?page={}&season_type=1&pagesize=20'page = 1start_urls = [request_url.format(page)]# 番剧信息的ajax请求season_url = 'https://bangumi.bilibili.com/ext/web_api/season_count?season_id={}&season_type=1&ts={}'# 番剧详情页的ajax请求media_url = 'https://www.bilibili.com/bangumi/media/md{}'def parse(self, response):# if self.page == 2:  # 限制爬取页数,用于测试爬取状态#     returnlist_data = json.loads(response.text).get('result').get('data')if list_data is None:  # 如果响应中没有数据,则结束执行returnfor data in list_data:ts = datetime.timestamp(datetime.now())yield scrapy.Request(url=self.season_url.format(data.get('season_id'), ts),callback=self.parse_details,meta=data)self.page += 1  # 生成下一页的请求yield scrapy.Request(url=self.request_url.format(self.page),callback=self.parse)def parse_details(self, response):item = BilibiliSpiderItem()meta_data = response.metaitem['season_id'] = meta_data.get('season_id')item['media_id'] = meta_data.get('media_id')item['title'] = meta_data.get('title')item['index_show'] = meta_data.get('index_show')item['is_finish'] = meta_data.get('is_finish')item['video_link'] = meta_data.get('link')item['cover'] = meta_data.get('cover')item['pub_real_time'] = meta_data.get('order').get('pub_real_time')item['renewal_time'] = meta_data.get('order').get('renewal_time')resp_data = json.loads(response.text).get('result')item['favorites'] = resp_data.get('favorites')item['coins'] = resp_data.get('coins')item['views'] = resp_data.get('views')item['danmakus'] = resp_data.get('danmakus')yield scrapy.Request(url=self.media_url.format(item['media_id']),callback=self.parse_media,meta=item)def parse_media(self, response):item = response.metaresp = response.xpath('//div[@class="media-info-r"]')item['media_tags'] = resp.xpath('//span[@class="media-tags"]/span/text()').extract()item['score'] = resp.xpath('//div[@class="media-info-score-content"]/text()').extract()[0]item['cm_count'] = resp.xpath('//div[@class="media-info-review-times"]/text()').extract()[0]yield item

项目源码链接:https://github.com/zhanghao19/bilibili_spider

[爬虫] B站番剧信息爬取相关推荐

  1. python爬取b站追番信息_Scrapy实战B站番剧信息爬取

    Part 0 安装 采用Anaconda版本的Python可以直接使用conda install -c scrapinghub scrapy进行安装,采用pip install Scrapy有的环境需 ...

  2. python爬b站番剧_Python爬取B站动漫番剧更新信息,附代码和讲解过程

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 目标:爬取b站番剧最近更新 输出格式:名字+播放量+简介 那么开始撸吧~ 用到的 ...

  3. 使用Scrapy框架,爬取b站番剧信息。

    使用Scrapy框架,爬取b站番剧信息. 感觉好久没写爬虫的,今天看了在b站浏览了一会儿,发现b站有很多东西可以爬取的,比如首页的排行榜,番剧感觉很容易找到数据来源的,所以就拿主页的番剧来练练手的. ...

  4. 爬虫实战:bilibili番剧排名爬取并数据可视化

    爬取bilibili的国创动漫的追番人数排行番剧,爬取该网页的番剧信息和各自番播放网页里的简介信息后,将数据存储到Excel和Database,最后通过网页将数据可视化. 1.爬取网页.数据解析.数据 ...

  5. 【2020-10-27】 scrapy爬虫之猎聘招聘信息爬取

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! scrapy爬虫之猎聘招聘信息爬取 1.项目场景 目标网址:https://www.liepin.com/zhao ...

  6. HttpClient实战爬虫B站番剧

    准备 我们打开一个b站首页,选择番剧索引. https://www.bilibili.com/anime/index/#season_version=-1&area=-1&is_fin ...

  7. 链家网页爬虫_爬虫实战1-----链家二手房信息爬取

    经过一段机器学习之后,发现实在是太枯燥了,为了增添一些趣味性以及熟练爬虫,在之后会不定时的爬取一些网站 旨在熟悉网页结构--尤其是HTML的元素,ajax存储,json:熟练使用pyspider,sc ...

  8. 基于scrapy的B站UP主信息爬取

    文章目录 思路分析 项目目录 代码 结果 思路分析 本次爬取的信息,包括UP主的mid.昵称.性别.头像的链接.个人简介.粉丝数.关注数.播放数.获赞数. 我的思路是,首先,选择一位B站比较火的UP主 ...

  9. 爬虫系列之链家的信息爬取及数据分析

    关于链家的数据爬取和分析 已经实现 1.房屋数据爬取并下载 2.房屋按区域分析 3.房屋按经纪人分析 4.前十经纪人 5.经纪人最有可能的位置分析 6.实现以地区划分房屋 目前存在的问题: 1.多线程 ...

最新文章

  1. 2021年大数据ELK(四):Lucene的美文搜索案例
  2. html怎么查看cad文件,如何直接查看CAD格式的图纸
  3. ArcGIS 9.3 安装之 Server的安装
  4. RLC协议简单理解1-RLC报文格式
  5. Python基础语法难点突破
  6. 我们在使用计算机时,不能做什么?,11秋季学期计算机应用技术基础学习周期_01任务-在线作业[1]1...
  7. Zuul和Eureka的负载均衡示例
  8. 华为Mate 40 Pro最新渲染图曝光:后置相机模组有变化
  9. WebKitGTK+ 编译
  10. 有没有这样一种程序员写代码的利器
  11. VMware ESXi5.0防火墙命令
  12. 您有一份来自阿里云达摩院的邀请函待查收!
  13. 人工智能的主要优势是什么?
  14. java闰年_编写java程序判断闰年。
  15. WGCNA:(加权共表达网络分析)
  16. Vue3嵌入krpano
  17. 《万能数据库查询分析器》创作人之2014年总结
  18. react hooks(dva) echarts 实现中国地图省份数据分布显示
  19. 微信公众号怎么集赞服务器,【微信点赞】_微信怎么点赞如何集赞微信点赞活动新手必备点赞教程...
  20. 强强联手:诚迈科技携手研华共同发起嵌入式Linux和Android联盟

热门文章

  1. 微信公众号二维码 链接
  2. 已知两个点的经纬度,计算两个点之间的距离(两种办法)
  3. 携号转网倒计时!中国电信上线“良心”套餐,网友:值得办理
  4. 关于prefetch下载Sra数据报错
  5. Gorm 相关问题记录
  6. Mac超好用的系统清理软件 MacBooster 8
  7. 曝光!那些你不知道的面试“潜规则”
  8. android progressdialog 背景色,怎么在android中利用ProgressDialog实现一个加载效果
  9. 618战报喜人,但客户服务的硬仗面临这些挑战
  10. 计算机存储中的单位换算