Scrapy的使用(1) – 爬取b站新番排行榜

scrapy框架笔记(1),参考官方文档与部分教程,完成一个简单的爬虫程序,爬取了b站的2021年1月新番数据

1. 创建项目

在需要存储的代码目录下输入

scrapy startproject animeRankSpider

该命令生成如下文件夹结构

|--animeRankSpider|--scrapy.cfg|--animeRankSpider|--__init__.py|--items.py|--middlewares.py|--pipelines.py|--settings.py|--spiders.py|--__init__.py

这些文件分别为:

  • scrapy.cfg 为scrapy的配置文件
  • items.py 为爬取内容的每个小单元设计,称之为item
  • middlewares.py 为爬虫中间件
  • pipelines.py 为信息处理过程的设计
  • setting.py 为爬虫的一些设置

2. 设计爬虫单元(scrapy中称为item)

观察b站新番相关数据,我准备爬取的内容为新番标题、弹幕量、播放量、追番人数、排名。

打开items.py,输入如下内容

import scrapyclass AnimerankspiderItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()name = scrapy.Field()rank = scrapy.Field()view = scrapy.Field()bullet = scrapy.Field()like = scrapy.Field()pass

3. 网页分析

爬取的网站为https://www.bilibili.com/v/popular/rank/bangumi ,可以在终端中输入下面的指令帮助分析

scrapy shell "https://www.bilibili.com/v/popular/rank/bangumi"

例如,在输入时

response.xpath('//*[@id="app"]/div[2]/div[2]/ul/li[1]/div[2]/div[2]/a/text()')

会有输出

[<Selector xpath='//*[@id="app"]/div[2]/div[2]/ul/li[1]/div[2]/div[2]/a/text()' data='Re:从零开始的异世界生活 第二季 后半'>]

也就是说可以根据页面中元素的xpath路径可以找到网页中元素的位置,这正是爬虫所需要的

这里安利一款chrome插件Xpath Helper ,可以帮助分析Xpath

观察两部新番标题的Xpath,分别为

//*[@id="app"]/div[2]/div[2]/ul/li[1]/div[2]/div[2]/a
//*[@id="app"]/div[2]/div[2]/ul/li[2]/div[2]/div[2]/a

可以发现,差别仅在于标签li后面的系数。经过进一步验证,发现网站的其他内容也有类似的格式

因此分析结果如下,index代表不同新番的系数,从1开始取值

  • 标题格式//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/a
  • 播放量//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/div[2]/span[1]
  • 弹幕量//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/div[2]/span[2]
  • 追番人数//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/div[2]/span[3]
  • 排序//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[1]

4.爬虫编写

输入命令,引号中内容为爬虫网站的主域名

scrapy genspider animeRankSpider "bilibili.com"

在animeRankSpider/spiders文件夹下创建了一个py结尾的新爬虫文件,输入如下代码

import scrapy
from animeRankSpider.items import AnimerankspiderItemclass BilibiliSpider(scrapy.Spider):name = 'animeRankSpider'allowed_domains = ['bilibili.com']start_urls = ['https://www.bilibili.com/v/popular/rank/bangumi']def parse(self, response):# filename = 'rank.html'# open(filename, 'wb').write(response.body)items = []rootPath = '//*[@id="app"]/div[2]/div[2]/ul'for index in range(49):item = AnimerankspiderItem()namePath = rootPath + '/li[{}]/div[2]/div[2]/a/text()'.format(index)viewPath = rootPath + '/li[{}]/div[2]/div[2]/div[2]/span[1]/text()'.format(index)rankPath = rootPath + '/li[{}]/div[1]/text()'.format(index)bulletPath = rootPath + '/li[{}]/div[2]/div[2]/div[2]/span[2]/text()'.format(index)likePath = rootPath + '/li[{}]/div[2]/div[2]/div[2]/span[3]/text()'.format(index)name = response.xpath(namePath).extract()view = response.xpath(viewPath).extract()rank = response.xpath(rankPath).extract()bullet = response.xpath(bulletPath).extract()like = response.xpath(likePath).extract()item['name'] = nameitem['view'] = viewitem['rank'] = rankitem['bullet'] = bulletitem['like'] = likeitems.append(item)return items

5. 运行爬虫

终端中输入命令

scrapy crawl animeRankSpider -o out.csv

等待片刻,生成的out.csv即为爬虫所得,可以用记事本或者excel打开

代码上传到了百度网盘,链接如下

链接:https://pan.baidu.com/s/1HzjZdmUQ-u7FeapgyAH8vA
提取码:lhvh

参考资料

  • scrapy文档
  • scrapy教程

Scrapy的使用(1) -- 爬取b站新番排行榜相关推荐

  1. 大数据Python爬取B站电影排行榜——爬取信息

    大数据Python爬取B站电影排行榜-信息爬取 前言 一.配置环境 二.爬取B站电影排行榜top100 1.找到B站电影排行榜top100网页 2.用URL进行爬取信息 三.建立Excel表并导出 总 ...

  2. python爬取B站网页排行榜数据(进阶版)

    我们已经在基础版本中获取了网站的排行,更新状态,名称,播放量,弹幕量和综合评分. 如下图所示,没看过基础版的建议先去基础版把前面的代码看完,这边不会再讲. 我们这次的目标是获取B站动漫的点赞量,投币数 ...

  3. python selenium 爬取b站全站排行榜100个视频的播放量 弹幕数 点赞量 投币数 收藏量 分享数

    参考:https://www.selenium.dev/ 需要提前安装 pip install -U selenium 和下载驱动 https://www.selenium.dev/documenta ...

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

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

  5. scrapy爬取B站动漫链接(顺便登录)

    scrapy爬取B站动漫链接(顺便登录) 分析需要爬取的信息 动漫主题/动漫分类/动漫标题/动漫简介/动漫URL/动漫更新时间 正式开始抓取之前先登录(不登陆并不影响抓取信息) 直接上代码 mport ...

  6. scrapy+selenium爬取B站生活区热门视频信息!

    在爬取动态网页时,一般尽量先找相应网页的API接口.但当接口不好找(或者接口的URL中含有加密参数)时,这时候就需要selenium来帮忙了.但由于selenium爬取速度比较慢,此时结合scrapy ...

  7. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下: http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这 ...

  8. 想要快速爬取整站图片?速进(附完整代码)

      大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...

  9. Python学习笔记-爬取B站电视剧《风犬少年的天空》弹幕并分析

    爬取B站电视剧<风犬少年的天空>弹幕并分析 写在前面 开始! 简单分析一下弹幕数据 蠢并痛苦着的学习过程... 干(烂)货环节-------弹幕的获取与整理 关于cid的获取 关于弹幕上限 ...

最新文章

  1. 编程之美 3.1 字符串移位包含问题
  2. 车辆动力学基础(1)
  3. C/C++Linux服务器开发/高级架构师
  4. Java黑皮书课后题第5章:*5.20(打印2到1000之间的素数)修改程序清单5-15,打印2到1000之间(包括2和1000)的所有素数。每1行显示8个素数,数字之间用一个空格字符隔开
  5. commons-lang3之StringUtils
  6. 正则表达式 guava_带有正则表达式模式的Google Guava Cache
  7. 数据科学 IPython 笔记本 8.3 Matplotlib 可视化
  8. oppo怎么广告接入_OPPO游戏创游无境 构建强大的游戏生态
  9. 微信蓝牙协议二:1800 or 18914E结尾和Varint压缩算法
  10. 太傻了!下次二面再回答不好“秒杀系统“设计原理,我就捶死自己...
  11. 查找算法---二分查找(递归方式)
  12. 洛谷P1990 覆盖墙壁(递推)
  13. MATLAB数据拟合学习总结
  14. php 获取搜索引擎,php获取搜索引擎关键字来源(支持百度、谷歌等搜索引擎)的函数...
  15. 数学英语计算机拼音,幼儿英语拼音数学早教机
  16. linux下搭建ecshop教程,linux下安装ecshop,
  17. 百度BAE专业版申购SSL证书
  18. 跨境电商的三个增长点:产品曝光 品类轮转 入自建站
  19. 记录:使用DJANGO从0开始搭建微信公众平台(0)
  20. 微服务架构之服务调用

热门文章

  1. 湖南省第十届蓝狐网络杯大学生计算机程序设计竞赛,2018湖南省第14届大学生计算机程序设计竞赛 C: 时间旅行...
  2. shuriken粒子系统(4)
  3. Linux如何挂载USB、硬盘、光驱、软驱
  4. 2021年“金三银四”来袭!java修改json文件
  5. 百度地图检索周围小吃添加大头针
  6. 基于SSM实现的游戏商城系统
  7. 去IOE or Not?
  8. 男人一致认为女人最缺德的行为
  9. 男人的生活质量取决于他所娶的女人
  10. 挑战图像处理100问(18)——Emboss滤波器