# 爬虫
本项目实现了**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`即可。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
<项目介绍> 基于大数据的学习视频数据分析与个性化推荐:以B站2022年知识/科技区视频数据作为分析对象。 对于以下几个部分更详细的文档详见目录下的README文件和项目报告。 数据爬取 本部分对应Spider文件夹。 使用Aiohttp实现异步分布式爬虫。 视频分析 本部分对应DataAnalysis文件夹。 使用Hadoop+Spark对总体数据进行 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
资源推荐
资源详情
资源评论
收起资源包目录
Python基于大数据的学习视频数据分析与个性化推荐系统+源代码+文档说明.zip (61个子文件)
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
共 61 条
- 1
资源评论
- wxdanniu052024-05-09资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
- m0_748939332024-03-31资源内容总结的很到位,内容详实,很受用,学到了~
- 卧龙文化工作室2024-04-13资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
奋斗奋斗再奋斗的ajie
- 粉丝: 230
- 资源: 2104
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功