掌上影视是一个可以在线浏览最新影视资源的平台,分为PC端、移动端,同时包括一个爬虫工具,可以自动爬取不同影视平台上的数据,从而保证该平台可以拥有最新的资源。该平台主要提供电影、电视剧、电视直播、戏曲相关资源的浏览与播放。
掌上影视的PC端和移动端采用相同的接口来获取数据,接口主要使用NodeJS
来编写,PC段主要使用Html
、Bootstrap
、Jquery
来实现,移动端使用Ionic
框架来实现,数据库采用MongoDB
数据库。
本项目仅为学习之作,请勿用作商业用途,否则后果自负!
- NodeJS:v10.16.3
- JDK:1.8.0
- MongoDB:v4.0.3
- Python:3.7.4
- Scrapy:1.6.0
- Nginx:1.17.0
- 在你的服务器中建立文件夹
/usr/local/etc
,将/usr/local/projects/PocketFilm/etc
下面的文件复制到/usr/local/etc
下面,然后将/usr/local/etc/nginx/nginx.conf
中的域名修改为你自己对应的域名 - 在你的服务器中建立文件夹
/usr/local/projects
- 将
Server/PocketFilm
上传到你的服务器中的/usr/local/projects
下面 - 进入到
/usr/local/projects/PocketFilm
中,以下操作均是相对于当前文件夹 - 进入到
files/shell
文件夹中- 启动
Nginx
:sh start_nginx.sh
- 启动
MongoDB
:nohup sh monitor.sh >/dev/null 2>nohup-monitor.out &
- 启动接口服务:
nohup sh start_api.sh >/dev/null 2>nohup-api.out &
- 启动掌上、掌上影视、掌上电视、掌上戏曲、掌上小品:
sh start_pocketfilm.sh
,如果启动单个或多个的话,其命令为sh start_pocketfilm.sh movie,tv,drama
,不同的服务以逗号隔开,关闭相关服务的命令为sh stop_pocketfilm.sh
,关闭单个或多个的命令为sh stop_pocketfilm.sh movie,tv,drama
,不同的服务以逗号隔开 - 启动推荐服务:
sh start_recommender.sh
- 启动
- 进入到
Spider/PocketLifeSpider/PocketLifeSpider/shell
文件夹中- 启动爬虫:
- 爬取全部数据:
nohup sh start_spiders.sh all all >/dev/null 2>nohup-all-all.out &
- 爬取最近数据:
nohup sh start_spiders.sh all latest >/dev/null 2>nohup-all-latest.out &
- 参数说明:
sh start_spiders.sh all all
- 第一个
all
:爬虫类型,all
表示全部爬虫,单个或多个爬虫以逗号分开,例如:sh start_spiders.sh tencent,youku,iqiyi all
- 第二个
all
:表示全部数据,如果想爬取最近数据,则为latest
,例如:nohup sh start_spiders.sh all latest >/dev/null 2>nohup-all-latest.out &
- 第一个
- 爬取全部数据:
- 启动爬虫:
- 项目分为接口服务、Web端、移动端、小程序、爬虫五个模块,不同模块使用不同的IDE导入相应的代码,具体如下:
- 接口服务:文件夹为
Web/PocketFilm
- 使用
WebStorm
导入相应代码 - 修改
Web/PocketFilm/routers/api.js
中的var dbURL = 'mongodb://***:27017';
,将***
修改为你自己服务器对应的ip - 修改
Web/PocketFilm/routers/api.js
中的var avatarList
,将其中的默认图片修改为你自己的默认图片地址
- 使用
- Web端:文件夹为
WWW/PocketFilm
- 使用
Intellij IDEA
导入相应代码 - 修改项目的Maven仓库地址
- 修改
WWW/PocketFIlm/Common/src/main/java/com/grayson/common/config/Configs.java
中的public static String API_HOST = "http://***:9000";
,将***
修改为你自己服务器对应的ip,然后使用软件右侧的MavenProjects
中的Common
中的Lifecycle->install
将其安装到你的Maven仓库中
- 使用
- 移动端:文件夹为
Mobile/PocketFilm
- 使用
Visual Studio Code
导入相应的代码 - 修改
Mobile/PocketFilm/src/app/config.service.ts
中的public sourceUrl = 'http://***:9000';
,将***
修改为你自己服务器对应的ip
- 使用
- 小程序:文件夹为
Applet/PocketFilm
- 使用
微信web开发者工具
导入相应的代码 - 修改
Applet/PocketFilm/utils/util.js
中的const configUrl = 'http://***:9000';
,将***
修改为你自己服务器对应的ip
- 使用
- 爬虫:文件夹为
Spider/PocketFilm
- 使用
PyCharm
导入相应的代码 - 修改
Spider/PocketLifeSpider/PocketLifeSpider/util/MongoDbUtils.py
中的"ip":'***'
,将***
修改为你自己服务器对应的ip
- 使用
- 接口服务:文件夹为
-
网页版:
- 新增
相册模块
,网址为 Grayson's Album,主要展示自己生活中的摄影照片,用相机记录生活的美好
- 新增
-
爬虫:
CommonUtils.py
中新增方法:download_album(album_name, save_path="/Volumes/MyPassport/MyPictures")
:下载相册中的照片modify_album_cover()
:修改相册封面change_photo_suffix()
:修改照片中的地址后缀upload_image_single(source_base_path, album_name, photo_name, target_base_path=IMAGES_PATH)
:上传单个文件夹中的图片upload_image_list(source_base_path='/Volumes/MyPassport/MyPictures/Qzone', target_base_path=IMAGES_PATH)
:上传多个文件夹中的图片get_image_info(image_item, path)
:获取照片信息download_images(url)
:下载图片到本地
- 爬虫:
CommonUtils.py
中新增方法:get_field_list(file_path, file_name)
:获取mongodb的字段名称列表write_data_to_csv(file_path, file_name, field_list, data_list, date)
:将数据以csv格式写入文件mongo_to_local(day_delta=0, hour_delta=0, minute_delta=0, second_delta=0, format=format, target_date=None)
:将mongodb中的数据下载到本地(csv)get_requests()
:获取requests对象parse_unicode(unicode_str, encoding='utf-8')
:将unicode字符串解析成指定格式的字符串handle_with_video_info_list(video_info_list)
:对video_info_list进行处理,返回相应的资源列表(xunleiyy)handle_with_mac_url(source_name_list, mac_url)
:对mac_url进行处理,返回相应的资源列表(ziyuan88ys)
- 爬虫:
- 修复优酷视频爬虫问题
CommonUtils.py
中新增方法:mongo_to_es(day_delta=0, hour_delta=0, minute_delta=0, second_delta=0, format=format)
:将mongodb中的数据同步到elasticsearch
- 移动版:
- 解决播放视频时自动锁屏的问题
- 网页版:
- 掌上影视、电视、戏曲、小品首页核心内容实现静态化
- 新增定时器,每隔10分钟渲染一下首页核心内容
CommonUtils.java
中新增方法:public void saveHtml(String url, String filePath, String fileName)
:获取网页内容并保存到本地public String getParseUrl(String movieType, String url)
:获取解析地址public JSONArray getRecords(HttpServletRequest request, String browse_type)
:获取浏览记录public Boolean existCookie(HttpServletRequest request, String cookieName)
:判断 request 中是否存在指定名称的 cookiepublic static JSONObject getCookieValue(HttpServletRequest request, String cookieName)
:从 request 中获取指定名称的 cookie 的值public static List<Integer> getPages(Integer count, Integer pageIndex, Integer pageSize, Integer totalPage)
:获取页码数据public static String doPost(String url, JSONObject json)
:执行POST请求public JSONObject doGet(String url)
:执行GET请求
- 服务器脚本:
- 新增脚本:
start_render.sh
:将最新渲染后的首页核心内容放入jar包中指定位置
- 新增脚本:
- 图片服务器:
- 新增图片服务器项目:
- 项目名称:
ImageWeb
- 接口地址:
http://images.grayson.top
- 项目名称:
- 将原先下载的本地图片移动到图片服务器中
- 新增图片服务器项目:
- 移动网页服务器:
- 新增移动网页服务器项目:
- 项目名称:
MobileWeb
- 接口地址:
http://m.grayson.top
- 项目名称:
- 新增移动网页服务器项目:
- 爬虫:
CommonUtils.py
中新增方法:def modify_src()
:修改图片地址(将包含/public...的地址修改为images.grayson.top的形式)generate_uuid()
:生成uuiddownload_film_image()
:下载影视图片download_image(db_utils, url_list, thread_num=10)
:多线程下载图片combine_piece()
:合并名称播放地址的小品modify_piece_type(type, type2)
:修改小品的类型get_today()
:获取今天的日期
- 爬虫:
- 新增采集资源师将图片保存到本地的功能
- 备份数据库
- 更新
README.md
文件,新增部署方法
、使用说明
- 备份数据库
- 网页版:
- 部分页面实现异步加载数据
- 备份数据库
- 网页版:
- 新增移动端适配,移动浏览器访问网站时自动重定向到
m.grayson.top
- 新增移动端适配,移动浏览器访问网站时自动重定向到
- 备份数据库
- 爬虫:
- 修复戏曲爬虫部分逻辑
- 移动端:
- 修复戏曲详情模块和播放模块相关显示问题
- 网页版:
- 修复戏曲和小品相关显示问题
- 备份数据库
- 爬虫:
- 新增小品吧(
piece3
)爬虫,网址为:http://www.xiaopin8.cc - 新增小品网(
piece4
)爬虫,网址为:http://www.xiaopin.tv
- 新增小品吧(
- 备份数据库
- 新增推荐系统模块,该推荐系统是基于内容的协同过滤算法实现的,用于计算影视相关性矩阵,然后根据用户的浏览记录为用户推荐相似的影视
CommonUtils.py
中新增方法:distinct(items,key)
:对字典列表根据指定的key去重get_yesterday()
:获取昨天的日期get_equal_rate_1(str1, str2)
:计算两个字符串的相似度get_recommendations(movie_type, type)
:计算影视的相似度calculate_euclidean(movie1,movie2, types, weight_types_dic)
:计算两个物品的相似度(欧几里德距离)
- 爬虫:
- 新增40资源站(
ziyuan40
)爬虫,网址为:https://jx40.net
- 新增40资源站(
- 移动端
- 版本更新到
3.2.0
- 新增影视推荐功能
- 版本更新到
- 网页版
- 新增影视推荐功能
- API接口
- 新增相关接口:
/recommendations/get/user
:获取推荐的数据(用户名)/recommendations/get
:获取推荐的数据(影视)
- 新增相关接口:
- 备份数据库
- 爬虫:
CommonUtils.py
新增方法:modify_update_status()
:修改影视的更新状态
- 移动端
- 版本更新到
3.1.0
- 新增反馈功能
- 版本更新到
- 网页版
www.grayson.top
:中新增反馈功能
- API接口
- 新增相关接口:
/feedback/get/all
:获取所有反馈信息/feedback/add
:添加反馈信息/feedback/reply
:回复反馈信息
- 新增相关接口:
- 备份数据库
- 爬虫:
- 修改腾讯视频(
tencent
)、优酷视频(youku
)、爱奇艺视频(iqiyi
)爬虫逻辑,使数据爬取更为快速 CommonUtils.py
新增方法:reverse_type_name(type_name)
:转换影视资源类型名称,例如将1转换为01get_year_from_name(name)
:从影视资源类型名称中获取年份generate_app_qrcode_image()
:生成下载掌上影视APP二维码
- 修改腾讯视频(
- 备份数据库
- 爬虫:
- 完善
start_spiders.sh
脚本逻辑,修复已经存在的问题 CommonUtils.py
新增方法:generate_qrcode_image(url)
:根据url生成二维码
- 完善
- 移动端:
- 影视模块中新增少儿版块
- 页面布局重新优化
- 修改视频解析接口,解决视频播放时有广告的问题
- 视频播放时自动横屏
- 新增搜索记录功能
- 戏曲和小品模块中新增全部功能
- 备份数据库
- 爬虫:
- 所有爬虫新增爬取最近数据功能,一部分爬取6页,一部分爬取2页
- 对所有爬虫已经出现的问题进行修改
- 备份数据库
- 爬虫:
- 对所有爬虫已经出现的问题进行修改
CommonUtils.py
中新增方法:change_src_suffix(old_suffix, new_suffix)
:修改图片中的地址后缀get_exclude_type2_list()
:获取排除在外的影视第二类型列表modify_movie_type2(type2_list)
:修改影视第二类型combine_movie()
:合并名称相同的影视exclude_piece_type2(type2)
:判断小品类型是否在被排除的类型里面reverse_update_time(update_time)
:转换更新日期reverse_release_date(release_date)
:转换发布日期delete_drama_with_url_invalid()
:删除不正确播放地址的戏曲视频
- 移动端:
- 对页面布局进行调整
- 新增搜索记录功能
- 备份数据库
- 移动端:
- 新增播放页面,修改影视详情页面,将在影视详情页面播放改为在播放页面播放
- 播放页面播放时自动横屏,可以在播放页面显示播放列表,不需要回到影视详情页面即可以更改影视资源
- 搜索页面新增记录搜索记录功能
- 备份数据库
- 爬虫部分:
- 新增相声小品网爬虫(
piece2
),网址为:https://www.verity-china.com,主要爬取一些最新的相声小品 - 新增永久资源网爬虫(
yongjiu
),网址为:http://www.yongjiuzy.cc,主要爬取最新的影视数据 - 新增135资源网爬虫(
zuiyuan135
),网址为:http://135zy0.com,主要爬取最新的影视数据 - 新增ok资源网爬虫(
ok
),网址为:http://www.okzy.co,主要爬取最新的影视数据 - 新增33uu资源网爬虫(
ziyuan33uu
),网址为:http://www.156zy.co,主要爬取最新的影视数据
- 新增相声小品网爬虫(
CommonUtils.py
中新增方法:is_exclude_type2(type2)
:判断影视第二类型是否需要排除is_need_source(item, collection)
:判断当前资源是否需要爬取get_type_from_type2(type2)
:根据影视第二类型type2获取第一类型typeupdate_src_batch(old_suffix, new_suffix)
:批量修改电视中的图片地址
- 修复爬虫和网页中部分已知问题
- 备份数据库
- 爬虫部分:腾讯爬虫中新增少儿部分,新增优酷爬虫(
youku
)、爱奇艺(iqiyi
)爬虫 CommonUtils.py
中新增方法:insert_item_to_dic(dic, key, new_key, new_value)
:向字典中添加新的元素reverse_arr(arr)
:对数组中的元素去空格
- 修复爬虫中部分已知问题
- 备份数据库
- 爬虫部分增加了腾讯视频(
tencent
),主要爬取电影、电视剧、综艺、动漫 - 电视爬虫接口改为好趣网(http://www.haoqu.net)
- 修复了爬虫部分的其他一些已知问题
- 新增掌上(
Web
)项目,包括掌上官网(http://www.grayson.top)、掌上影视(http://film.grayson.top)、掌上电视(http://tv.grayson.top)、掌上戏曲(http://drama.grayson.top)、掌上小品(http://piece.grayson.top) - 备份数据库
- 移动版更换相关视频解析接口
- 移动版解决其它已知问题
- 新增爬取最大资源网(http://www.zuidazy1.net/)、酷云资源网 (http://www.kuyunzy1.com/)相关爬虫
- 备份数据库
- 移动版对影视、电视、戏曲、小品模块增加缓存功能
- 移动版解决其它已知问题
- 备份数据库
- 移动版修复刷新时推荐数据不能更新的问题
- 移动版解决其它已知问题
- 移动版在影视、电视、戏曲、小品模块增加猜你喜欢功能
- 移动版解决其它已知问题
- 改进爬虫代码、提升数据爬取效率
- 备份数据库
- 移动版修改接口地址
- 修复移动版其它已知问题
- 备份数据库
- 移动版新增双击退出功能
- 修复移动版其它已知问题
- 备份数据库
- 移动版新增小品模块
- 移动版实现浏览记录功能
- 解决移动版部分已知问题
- 爬虫新增小品模块
- 爬取小品数据
- 解决爬虫部分已知问题
- 接口新增获取所有小品数据、获取小品详情、获取小品类型、添加浏览记录、获取浏览记录接口
- 更新影视、电视、戏曲、小品数据
- 备份数据库
- 移动版功能完善
- 爬虫新增根据关键词爬取内容的功能
- 爬虫已知问题的修复
- 数据库的备份
- 移动版新增戏曲功能
- 修复戏曲爬虫问题
- 备份数据库
- 修复戏曲爬虫问题
- 新增戏曲类型爬虫
- 新增掌上影视小程序项目,并完成相应功能
- 备份数据库
- 增加戏曲爬虫
- 增加备份数据库脚本,并将数据库进行备份
- 修复影视爬虫爬取数据中影视名称、地区、简介为数组的问题
- 增加判断
python
类型的方法
- 完成影视接口代码的编写、测试及运行
- 完成移动端代码的编写、测试及运行
- 完成影视爬虫代码的编写、测试及运行
将Web/PocketFilm/routers
下面的api.js
中的var dbURL = 'mongodb://localhost:27017';
中的localhost
替换为数据库所在机器的域名或ip地址。
将Mobile/PocketFilm/src/app
下面的config.service.ts
中的public apiUrl = 'http://139.199.24.205:8080/api';
中的139.199.24.205
替换为接口所在机器的域名或ip地址。
1、将Spider/PocketLifeSpider/PocketLifeSpider/util
下面的MongoDbUtils.py
中的139.199.24.205
环卫数据库所在机器的域名或ip地址。
settings = {
# "ip":'localhost', #ip
"ip":'139.199.24.205', #ip
"port":27017, #端口
"db_name" : "pocket_film", #数据库名字
}
2、资源名称及其对应的命令
资源名称 | 命令 |
---|---|
电影 | scrapy crawl movie -a target=1 |
电视剧 | scrapy crawl movie -a target=2 |
综艺 | scrapy crawl movie -a target=3 |
动漫 | scrapy crawl movie -a target=4 |
影视类型 | scrapy crawl movie_type |
电影播放资源 | scrapy crawl movie_source -a target=1 |
电视剧播放资源 | scrapy crawl movie_source -a target=2 |
综艺播放资源 | scrapy crawl movie_source -a target=3 |
动漫播放资源 | scrapy crawl movie_source -a target=4 |
电视直播 | scrapy crawl tv |