Scrapy的使用(1) -- 爬取b站新番排行榜
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
为爬取内容的每个小单元设计,称之为itemmiddlewares.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站新番排行榜相关推荐
- 大数据Python爬取B站电影排行榜——爬取信息
大数据Python爬取B站电影排行榜-信息爬取 前言 一.配置环境 二.爬取B站电影排行榜top100 1.找到B站电影排行榜top100网页 2.用URL进行爬取信息 三.建立Excel表并导出 总 ...
- python爬取B站网页排行榜数据(进阶版)
我们已经在基础版本中获取了网站的排行,更新状态,名称,播放量,弹幕量和综合评分. 如下图所示,没看过基础版的建议先去基础版把前面的代码看完,这边不会再讲. 我们这次的目标是获取B站动漫的点赞量,投币数 ...
- python selenium 爬取b站全站排行榜100个视频的播放量 弹幕数 点赞量 投币数 收藏量 分享数
参考:https://www.selenium.dev/ 需要提前安装 pip install -U selenium 和下载驱动 https://www.selenium.dev/documenta ...
- 使用Scrapy框架,爬取b站番剧信息。
使用Scrapy框架,爬取b站番剧信息. 感觉好久没写爬虫的,今天看了在b站浏览了一会儿,发现b站有很多东西可以爬取的,比如首页的排行榜,番剧感觉很容易找到数据来源的,所以就拿主页的番剧来练练手的. ...
- scrapy爬取B站动漫链接(顺便登录)
scrapy爬取B站动漫链接(顺便登录) 分析需要爬取的信息 动漫主题/动漫分类/动漫标题/动漫简介/动漫URL/动漫更新时间 正式开始抓取之前先登录(不登陆并不影响抓取信息) 直接上代码 mport ...
- scrapy+selenium爬取B站生活区热门视频信息!
在爬取动态网页时,一般尽量先找相应网页的API接口.但当接口不好找(或者接口的URL中含有加密参数)时,这时候就需要selenium来帮忙了.但由于selenium爬取速度比较慢,此时结合scrapy ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下: http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这 ...
- 想要快速爬取整站图片?速进(附完整代码)
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...
- Python学习笔记-爬取B站电视剧《风犬少年的天空》弹幕并分析
爬取B站电视剧<风犬少年的天空>弹幕并分析 写在前面 开始! 简单分析一下弹幕数据 蠢并痛苦着的学习过程... 干(烂)货环节-------弹幕的获取与整理 关于cid的获取 关于弹幕上限 ...
最新文章
- 编程之美 3.1 字符串移位包含问题
- 车辆动力学基础(1)
- C/C++Linux服务器开发/高级架构师
- Java黑皮书课后题第5章:*5.20(打印2到1000之间的素数)修改程序清单5-15,打印2到1000之间(包括2和1000)的所有素数。每1行显示8个素数,数字之间用一个空格字符隔开
- commons-lang3之StringUtils
- 正则表达式 guava_带有正则表达式模式的Google Guava Cache
- 数据科学 IPython 笔记本 8.3 Matplotlib 可视化
- oppo怎么广告接入_OPPO游戏创游无境 构建强大的游戏生态
- 微信蓝牙协议二:1800 or 18914E结尾和Varint压缩算法
- 太傻了!下次二面再回答不好“秒杀系统“设计原理,我就捶死自己...
- 查找算法---二分查找(递归方式)
- 洛谷P1990 覆盖墙壁(递推)
- MATLAB数据拟合学习总结
- php 获取搜索引擎,php获取搜索引擎关键字来源(支持百度、谷歌等搜索引擎)的函数...
- 数学英语计算机拼音,幼儿英语拼音数学早教机
- linux下搭建ecshop教程,linux下安装ecshop,
- 百度BAE专业版申购SSL证书
- 跨境电商的三个增长点:产品曝光 品类轮转 入自建站
- 记录:使用DJANGO从0开始搭建微信公众平台(0)
- 微服务架构之服务调用