还要避开带可变参数的标记,比如有的标签后面带随机id,比如
1.2 调整内容过滤规则的优先级
很多人喜欢加一堆过滤规则,删广告、删无关内容,但搞反了顺序就会把正文也滤掉。你要先写保留内容的规则,再写删除无关内容的规则。
比如你要先把正文从整个页面里截出来,再过滤正文里的广告标签,别上来就全页过滤,很容易把正文的开头或者结尾给误删了。
避坑提醒:别用太宽泛的过滤关键词,比如你直接过滤“div”标签,那正文里嵌套的div内容全都会被删掉,要加具体的class或者id属性再过滤。
2 调整phpcms自带的采集配置参数
要是规则没问题,那大概率是系统默认配置限制了采集内容。
2.1 改大采集内容的长度限制
phpcms默认的采集内容长度是2M,要是你采的正文很长,带很多图片,超过这个长度就会被自动截断,看起来就是缺了后半段。
改的方法很简单,找到phpcms根目录下的caches/configs/system.php文件,找到对应的配置项修改就行:
``` // 原默认配置 'colletion_content_maxsize' => 2097152, // 修改为10M,足够99%的内容场景 'colletion_content_maxsize' => 10485760, ```
还要记得改php.ini里的post_max_size和upload_max_filesize,两个都改到10M以上,不然服务器层面就会给你截断内容。
2.2 关闭不需要的自动过滤功能
phpcms默认会自动过滤script、iframe等标签,要是你采的内容里有嵌入的视频、特殊样式,也会被删掉。
你可以找到phpcms/modules/collection/collection.class.php文件,搜索“allow_tags”相关的代码,把你不需要过滤的标签加到允许列表里。比如你要保留video标签,就在数组里加上'video','source'这两个标签,采集的时候就不会被删掉了。
避坑提醒:改完代码记得清一下后台缓存,不然改了也不生效,我之前就踩过这个坑,改了半小时代码没效果,清完缓存立刻就好。
3 解决目标站点反爬导致的内容缺失
要是前两步都没问题,那就是目标站点防采集,给你返回了不完整的内容。
3.1 给采集加伪装请求头
现在很多站点会防采集,要是你请求的时候没有正常的浏览器头,就会返回半页内容或者空白页。
你在phpcms的采集规则里,找到“高级设置”,把user-agent改成正常的浏览器标识,比如:
``` Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 ```还要加上referer字段,填目标站点的首页地址,伪装成从目标站点自己的页面点进来的,通过率会高很多。
3.2 调慢采集的间隔时间
你要是采集频率太快,目标站点的防火墙会直接给你返回错误页,你采到的内容自然是错的。
你在采集规则的高级设置里,把采集间隔改成3秒以上,要是目标站点反爬严,就改成5到10秒,别为了快把自己的ip给封了,反而更麻烦。要是你采的内容很多,可以换用代理ip池,每个请求换个ip,基本不会被封。
其实phpcms采集缺内容,大多都是这三类问题,你按我给的顺序排查就行,先查规则,再改系统配置,最后处理反爬,基本都能搞定。
现在你就打开自己的phpcms后台,找最近采集失败的那篇内容,对着第一步先查规则的起止标记,大概率十分钟就能解决问题。要是还有搞不定的,你可以把具体情况留在评论区,我看到了都会回。












