首先确认服务器可正常访问目标视频站点,避免因网络问题导致抓取失败:登录帝国CMS所在服务器,执行对应命令检测连通性。 Linux服务器直接执行: ``` curl -I https://目标视频站域名/任意公开可访问的视频页地址 ``` 返回HTTP 200/302代表连通正常,返回403/502/超时则说明服务器IP被封禁、DNS解析异常或端口被拦截。 Windows服务器直接在CMD中执行: ``` ping 目标视频站域名 telnet 目标视频站域名 443 ``` 两项测试都通过才算网络正常,否则先联系服务器运营商解决网络问题。
确认视频存储目录权限符合要求:帝国CMS默认视频附件目录为/e/data/attachment/,Linux环境需设置为755权限,Windows IIS环境需开启Everyone可读可写权限。 登录帝国CMS后台进入【采集管理】-【采集节点管理】,检查对应节点的附件存储路径,路径不能包含中文、特殊字符,结尾必须加斜杠。
打开目标站视频页按F12打开开发者工具,定位视频真实地址的前后唯一标识,比如目标站视频地址代码为: ```
,同时勾选【自动补全URL】【去除HTML标签】选项。前后标识必须是整个页面唯一的,不能包含目标站动态生成的参数。 2. 动态加载视频地址适配 如果目标站视频地址是JS动态渲染的,帝国CMS默认静态采集无法抓取,需安装官方JS渲染插件:下载地址https://www.phome.net/extend/downinfo/1047.html ,上传到/e/extend/目录后在后台插件管理中启用。 进入对应采集节点的【高级设置】,勾选【启用JS渲染】,渲染延迟设置为2000-3000毫秒,确保JS完全加载后再抓取内容。 三、目标站反爬策略规避实操 1. 请求头配置 90%的反爬拦截是因为请求头不符合浏览器规范,直接复制你本地浏览器访问目标站的请求头,填入采集节点【高级设置】的自定义请求头区域,示例配置可直接套用: ``` User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Referer: https://目标站域名/ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 ``` 如果目标站需要登录才能观看视频,先在本地浏览器登录目标站,复制浏览器中的Cookie值填入请求头即可。 2. 采集频率限制 高频请求会被目标站直接封IP,在采集节点【采集设置】中设置采集间隔3-5秒/次,每采集20条休息60秒。如果仍被封禁,可在【高级设置】的代理配置项中填入代理IP,格式为http://账号:密码@代理IP:端口,每行一个。 四、帝国CMS自身配置问题修复 1. PHP参数调整 大体积视频抓取失败大概率是PHP超时、上传限制导致,修改服务器php.ini文件的以下参数: ``` max_execution_time = 3600 post_max_size = 2048M upload_max_filesize = 2048M memory_limit = 1024M allow_url_fopen = On ``` 修改完成后重启PHP服务,登录帝国CMS后台进入【系统设置】-【系统参数设置】-【附件设置】,把最大上传大小设置为2048M,和php.ini配置保持一致。 2. 采集模式切换 默认fopen模式容易出现SSL证书验证、超时问题,切换为curl采集模式更稳定:修改/e/class/connect.php文件,找到GetFile函数,替换为以下可直接复制的代码: ``` function GetFile($url,$savepath){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3600); $content = curl_exec($ch); curl_close($ch); $fp = fopen($savepath, 'wb'); fwrite($fp, $content); fclose($fp); return file_exists($savepath) ? true : false; } ``` 保存后重新测试采集即可。 五、特殊视频格式适配方案 如果目标站是m3u8、flv等流媒体格式,帝国CMS默认不支持直接保存,需安装FFmpeg转码工具,官方下载地址https://ffmpeg.org/download.html ,安装完成后在采集节点添加【采集后置钩子】,钩子代码如下: ``` query("update {$dbtbpre}ecms_你对应模型表名 set video_url='/e/data/attachment/video/".$navinfor['id'].".mp4' where id='".$navinfor['id']."'"); ?> ``` 注意把代码中的表名替换为你自己的内容模型表名。 六、最终验证步骤 所有配置完成后,先进入采集节点点击【测试采集】,查看返回的内容中是否包含正确的视频地址,再点击【采集1条】测试附件保存是否正常,确认前端可正常播放视频后,再启动批量采集任务。
如果目标站视频地址是JS动态渲染的,帝国CMS默认静态采集无法抓取,需安装官方JS渲染插件:下载地址https://www.phome.net/extend/downinfo/1047.html ,上传到/e/extend/目录后在后台插件管理中启用。 进入对应采集节点的【高级设置】,勾选【启用JS渲染】,渲染延迟设置为2000-3000毫秒,确保JS完全加载后再抓取内容。
90%的反爬拦截是因为请求头不符合浏览器规范,直接复制你本地浏览器访问目标站的请求头,填入采集节点【高级设置】的自定义请求头区域,示例配置可直接套用: ``` User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Referer: https://目标站域名/ Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 ``` 如果目标站需要登录才能观看视频,先在本地浏览器登录目标站,复制浏览器中的Cookie值填入请求头即可。
高频请求会被目标站直接封IP,在采集节点【采集设置】中设置采集间隔3-5秒/次,每采集20条休息60秒。如果仍被封禁,可在【高级设置】的代理配置项中填入代理IP,格式为http://账号:密码@代理IP:端口,每行一个。
大体积视频抓取失败大概率是PHP超时、上传限制导致,修改服务器php.ini文件的以下参数: ``` max_execution_time = 3600 post_max_size = 2048M upload_max_filesize = 2048M memory_limit = 1024M allow_url_fopen = On ``` 修改完成后重启PHP服务,登录帝国CMS后台进入【系统设置】-【系统参数设置】-【附件设置】,把最大上传大小设置为2048M,和php.ini配置保持一致。
默认fopen模式容易出现SSL证书验证、超时问题,切换为curl采集模式更稳定:修改/e/class/connect.php文件,找到GetFile函数,替换为以下可直接复制的代码: ``` function GetFile($url,$savepath){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 3600); $content = curl_exec($ch); curl_close($ch); $fp = fopen($savepath, 'wb'); fwrite($fp, $content); fclose($fp); return file_exists($savepath) ? true : false; } ``` 保存后重新测试采集即可。
如果目标站是m3u8、flv等流媒体格式,帝国CMS默认不支持直接保存,需安装FFmpeg转码工具,官方下载地址https://ffmpeg.org/download.html ,安装完成后在采集节点添加【采集后置钩子】,钩子代码如下: ``` query("update {$dbtbpre}ecms_你对应模型表名 set video_url='/e/data/attachment/video/".$navinfor['id'].".mp4' where id='".$navinfor['id']."'"); ?> ``` 注意把代码中的表名替换为你自己的内容模型表名。
所有配置完成后,先进入采集节点点击【测试采集】,查看返回的内容中是否包含正确的视频地址,再点击【采集1条】测试附件保存是否正常,确认前端可正常播放视频后,再启动批量采集任务。
上一篇: 帝国CMS采集任务暂停恢复实用方法分享
下一篇: 帝国CMS采集速度提速优化:秒懂的实用技巧分享
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图