# 爬虫
本项目实现了**Aiohttp分布式爬虫**。
由于集群电脑数量不够,且需要爬取的数据量巨大,再加之B站有强大的反爬机制,所以需要更多的电脑(IP)来爬取。因此一种方便的部署方式是十分必要的,采用这种方式能很快速地在其他电脑上运行爬取任务。任务如下:
- 爬取2022年1月1日到2022年11月20日哔哩哔哩知识区和科技区的所有子分区下按热度排序前100页的**详细视频数据**。
- 爬取2022年1月1日到2022年11月20日哔哩哔哩知识区和科技区的所有子分区下**视频数量**。
> **注意:**运行前请一定要在`config`文件夹下创建`config.py`并在里面填写数据库相关信息,下面是一个示例
>
> ```
> # Mysql
> HOST="..." # 数据库host
> PORT=... # 数据库端口
> USER="..." # 数据库用户名
> PASSWORD="..." # 数据库密码
> DATABASE="..." # 数据库名称
>
> # MongoDB
> M_HOST="..." # 数据库host
> M_PORT=... # 数据库端口
> M_USER="..." # 数据库用户
> M_PASSWORD="..." # 数据库密码
> ```
## Aiohttp 分布式爬虫
通过使用`aiohttp`配合`asyncio`同时发起多次请求,快速获取大量数据。再使用`pymysql`将数据保存到MySQL中。
### 基本步骤
#### 1 添加任务
运行`add_task.py`向task表内插入任务,表项定义如下:
| 表项名称 | 类型 | 说明 |
| --------- | ---- | ------------------------------------------------------------ |
| id | int | 主键,唯一标识一个task |
| page | int | 爬取第几页 |
| cate_id | int | B站小分区id |
| time_from | text | 爬取数据的开始时间 |
| time_to | text | 爬取数据的结束时间 |
| finish | int | 完成的标记。`0`表示未处理,`-1`表示正在处理,`-2`表示处理完成,`x`(x>0)表示在爬取过程中有x条数据被拦截了 |
#### 2 爬取详细视频数据
运行`get_main_data.py`获取上文提到的所有数据(限定时间内的所有视频信息等),表项定义如下:
| 表项名称 | 类型 | 说明 |
| -------- | -------- | -------------------- |
| aid | bigint | av号,主键 |
| title | text | 视频标题 |
| tag | text | 视频tags,逗号分隔符 |
| pubdate | datetime | 视频上传时间 |
| desc | longtext | 视频简介 |
| duration | bigint | 视频长度,单位为秒 |
| mid | bigint | UP主UID |
| view | int | 播放量 |
| danmaku | int | 弹幕条数 |
| reply | int | 评论条数 |
| favorite | int | 收藏人数 |
| coin | int | 投币数 |
| share | int | 分享数 |
| his_rank | bigint | 历史最高排名 |
| like | int | 获赞次数 |
这里的`get_main_data.py`可以轻松地在不在集群中的其他电脑上运行(部署非常方便)。
#### 3 数据库迁移
由于项目后期发现在大数据量下MySQL数据库增删改查速度很慢,效率低下,因此后期我们将MySQL数据库上的数据迁移到MongoDB。
运行`mysql2mongo.py`即可将`mysql`的`bilibili`数据表迁移至`mongo`数据库中。
#### 4 爬取总体视频数量数据
运行`get_overall_data.py`获取上文提到的总体视频信息(各分区每个月的视频数量),表项定义如下:
| 表项名称 | 类型(MongoDB中的定义) | 说明 |
| -------- | --------------------- | ---------- |
| _id | ObjectId | Id,主键 |
| cate | string | 小分区名称 |
| fq | string | 大分区名称 |
| month | int32 | 统计月份 |
| num | int32 | 视频数量 |
| cate_id | int32 | 小分区id |
| fq_id | int32 | 大分区id |
## 代码运行
下面对上述过程进行一个总结,告诉读者如何运行代码
(1)准备数据库
由于项目中使用了两种数据库,因此需要部署`MySQL(5.7.18)`和`MongoDB(5.0.6)`两种数据库。可以选择自行部署在主机上然后修改`config.py`文件中的主机名等信息即可。本项目采用云数据库的方式,在腾讯云上购买了`MySQL`数据库,在阿里云上购买了`MongoDB`数据库来存储数据。
(2)新增爬取任务
直接运行`Spider`文件下的`add_task.py`即可。
环境要求:`python>=3.8`,`PyMySQL>=1.0.2`
(3)运行爬取全部数据的任务
直接运行`Spider`文件下的`get_main_data.py`即可。
额外环境要求:`aiohttp>=3.8.3`
(4)运行爬取总体数据的任务
直接运行`Spider`文件下的`get_overall_data.py`即可。
额外环境要求:`pymongo>=3.9.0`
(5)迁移数据库
直接运行`Spider`文件下的`mysql2mongo.py`即可。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 毕业设计 基于Python+FastAPI+Vue的学习视频数据分析与个性化大数据推荐系统源码+详细说明+全部数据资料 高分项目毕业设计 基于Python+FastAPI+Vue的学习视频数据分析与个性化大数据推荐系统源码+详细说明+全部数据资料 高分项目 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计 基于Python+FastAPI+Vue大数据的学习视频数据分析与个性化推荐系统源码+详细说明+全部数据资料 高分项目 以B站2022年知识科技区视频数据作为分析对象.zip (62个子文件)
BigDataProject-main
Spider
mysql2mongo.py 719B
get_main_data.py 8KB
get_overall_data.py 2KB
database
mysql_db.py 2KB
mongo_db.py 2KB
request
request.py 1KB
add_task.py 1KB
README.md 5KB
config
config_template.py 304B
LICENSE 11KB
DataAnlysis
title_word_count.py 2KB
database
mysql_db.py 2KB
mongo_db.py 2KB
stop_words.txt 14KB
tags_analysis.py 1KB
README.md 3KB
process_database.py 87B
config
config_template.py 304B
Visualization
bigdata-project
src
App.vue 714B
assets
main.css 620B
logo.svg 308B
base.css 2KB
main.js 182B
components
HelloWorld.vue 678B
vedio.vue 4KB
router
index.js 432B
views
RecommendView.vue 6KB
HomeView.vue 24KB
vite.config.js 906B
package.json 505B
public
favicon.ico 4KB
package-lock.json 107KB
index.html 390B
.gitignore 302B
static
favorites-o.svg 1KB
comment.svg 1KB
up.svg 2KB
danmu.svg 2KB
share.svg 1KB
honor.svg 2KB
play.svg 2KB
coin.svg 3KB
like.svg 1KB
README.md 639B
README.md 1KB
.gitignore 2KB
Backend
main.py 757B
SingleVideoInfo
single_video.py 6KB
basic.py 567B
database
db.py 4KB
VideoRecommendation
video_recommend.py 3KB
generate_tfidf_model.py 1KB
request
request.py 1KB
functions
many_video_info.py 1KB
single_video_info.py 2KB
sentiment_analysis.py 840B
stop_words.txt 14KB
word_segment.py 7KB
README.md 2KB
AllVideoInfo
all_video.py 3KB
README.md 711B
171265889347208773632.zip 416B
共 62 条
- 1
资源评论
不走小道
- 粉丝: 3342
- 资源: 5059
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- vlmcsd-1113-2020-03-28-Hotbird64(最新版本KMS)
- 433.基于SpringBoot的冷链物流系统(含报告).zip
- com.harmonyos4.exception.PowerFailureException(怎么解决).md
- 使用 Python 字典统计字符串中每个字符的出现次数.docx
- com.harmonyos4.exception.SystemBootFailureException(怎么解决).md
- 球队获胜数据集.zip
- ERR-NULL-POINTER(解决方案).md
- <项目代码>YOLOv8 航拍行人识别<目标检测>
- 计算机网络-socket-inet-master.zip
- Java编程学习路线:从基础到实战全攻略
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功