为什么要设置分页规则?
网站上的文章列表或专题内容,常常被分成了多个页面(list_1.html, list_2.html...),DedeCMS 采集器默认只会抓取你指定的第一个 URL,为了抓取所有分页上的内容,你需要告诉采集器:
- 如何找到下一页的链接:通过分析 HTML 结构,找到一个规律性的链接模式。
- 何时停止抓取:设置一个最大页数,防止无限循环或抓取过多无效页面。
设置分页规则的步骤
在 DedeCMS 后台,进入 采集 -> 管理采集节点,点击你要编辑的节点,在“任务配置”页面,找到“列表分页设置”部分,就是你需要设置的地方。
这里有三个关键选项,通常它们是组合使用的:
列表起始页 (URL)
这是你采集任务的起点,通常是一个列表的第一页,
http://www.example.com/news/list_1.htmlhttp://www.example.com/special/index.php?id=1
DedeCMS 会首先抓取这个页面,并根据你下面设置的规则来寻找后续的页面。
列表分页规则
这是整个分页采集的核心,它是一个“指令”,告诉采集器如何从当前页面找到下一页,规则由三部分组成:URL规则、选择器 和 JS支持。
A. URL规则
这是最灵活的部分,用于匹配下一页链接的 URL 模式,它支持通配符 。
常见模式:
-
数字递增模式 (最常见)
- 场景: 网站的分页 URL 是
list_1.html,list_2.html,list_3.html... - URL规则:
list_*.html - 说明: 会匹配
1,2,3等数字,采集器会自动尝试list_1.html,list_2.html... 直到没有页面或达到最大页数。
- 场景: 网站的分页 URL 是
-
参数递增模式
- 场景: 网站的分页 URL 是
index.php?page=1,index.php?page=2... - URL规则:
index.php?page=* - 说明: 会匹配
1,2,3等数字,并替换到page=参数后面。
- 场景: 网站的分页 URL 是
-
包含目录的模式
- 场景: URL 是
news/list/1.html,news/list/2.html... - URL规则:
news/list/*.html
- 场景: URL 是
-
复杂参数模式
- 场景: URL 是
index.php?cat=5&pn=1,index.php?cat=5&pn=2... - URL规则:
index.php?cat=5&pn=* - 说明: 这种情况下, 只会替换
pn=后面的部分,而cat=5这样的固定参数会被保留。
- 场景: URL 是
最佳实践:
- 先去目标网站,手动点击几页“下一页”。
- 观察浏览器地址栏 URL 的变化规律。
- 将这个规律中的变量部分(如页码)替换成 ,填入“URL规则”中。
B. 选择器
如果网站的“下一页”按钮不是通过简单的 URL 规律实现,而是由 JavaScript 动态生成的,或者它的 URL 比较复杂,无法用通配符 描述,这时就需要使用“选择器”。
工作原理: 采集器会先抓取当前页面的 HTML 源码,然后使用你提供的选择器(类似 CSS 选择器)来定位到“下一页”的链接元素,并从中提取出真实的 URL。
如何获取选择器? 你需要使用浏览器的开发者工具(F12):
- 在目标列表页,右键点击“下一页”按钮。
- 选择“检查”(Inspect),会打开开发者工具并定位到对应的 HTML 代码。
- 分析这个
<a>标签,找到它唯一的特征,class、id或者特定的href属性。 - 将这个特征写成 CSS 选择器格式。
示例:
假设“下一页”按钮的 HTML 是:
<a class="next-page" href="/news/list_2.html">下一页</a>
选择器可以填写为:
.next-page(通过 class 选择)a.next-page(更精确,指定是 a 标签且 class 为 next-page)
使用场景:
- 网站使用 AJAX 加载分页内容,URL 中没有页码规律。
- “下一页”的 URL 是相对路径(如
/list_2.html),需要结合当前域名才能使用。 - URL 中包含大量动态参数(如时间戳、随机数),无法用 匹配。
JS 支持
这是一个开关,与“选择器”选项紧密相关。
- 不勾选 (默认): 采集器会作为普通浏览器请求页面,获取原始 HTML,适用于绝大多数静态或伪静态网站。
- 勾选: 采集器会启动一个无头浏览器(模拟真实浏览器环境)来加载页面。只有当你需要抓取由 JavaScript 动态渲染的“下一页”链接时,才需要勾选此项。
注意: 勾选 JS 支持会显著降低采集速度,并增加服务器资源消耗,仅在必要时使用。
综合应用实例
假设我们要采集 http://www.example.com/article/list_1.html 这个网站,它的分页规律如下:
- 第1页:
http://www.example.com/article/list_1.html - 第2页:
http://www.example.com/article/list_2.html - 第10页:
http://www.example.com/article/list_10.html - 第11页:
http://www.example.com/article/list_11.html(这个页面不存在,404)
设置步骤:
-
列表起始页:
http://www.example.com/article/list_1.html -
列表分页规则:
- URL规则:
http://www.example.com/article/list_*.html- 注意:这里填写完整的 URL 模式,`` 代表页码。*
- 选择器: 留空
- 因为我们的 URL 规则已经足够清晰,不需要通过选择器来查找链接。
- JS支持: 不勾选
- 这是一个标准的静态分页 URL,不需要 JS。
- URL规则:
-
最大页数:
20- 设置一个合理的上限,20 页,即使网站有 100 页,采集器也最多抓取 20 页,这可以防止因规则错误导致采集大量无效页面。
采集器的工作流程:
- 从
list_1.html开始采集。 - 采集完
list_1.html后,根据list_*.html规则,自动拼接出list_2.html的 URL 并采集。 - 然后是
list_3.html,list_4.html... - 当尝试访问
list_21.html时,因为超过了“最大页数”20,采集任务停止。
常见问题与技巧
-
采集器只采集第一页,后续页没有采集?
- 检查 URL 规则:是否和网站的实际分页 URL 格式不符?比如网站是
index.php?page=*,你却写了list_*.html。 - 检查最大页数:是否设置得太小?比如网站有 50 页,你只设置了 5 页。
- 检查网站结构:是否使用了 JS 动态加载分页?如果是,需要使用“选择器”并勾选“JS支持”。
- 检查 URL 规则:是否和网站的实际分页 URL 格式不符?比如网站是
-
采集到的内容重复或错乱?
- 检查分页规则:规则可能写错了,导致采集器跳过了某些页面或重复采集了某些页面,仔细核对 URL 规则。
- 检查列表内容选择器:确保你设置的“文章内容链接”选择器在每一页上都能准确地、唯一地指向正确的文章。
-
如何处理相对路径的分页?
- 场景: “下一页”的
href是/list_2.html,而不是完整的http://www.example.com/list_2.html。 - 解决方案:
- 方法一 (推荐): 在“URL规则”中填写完整的 URL 模式,
http://www.example.com/list_*.html,DedeCMS 会自动处理。 - 方法二: 如果无法确定完整域名,可以使用“选择器”,在开发者工具中找到
<a href="/list_2.html">,选择器可以写成a[href^="/list_"](选择 href 属性以/list_开头的 a 标签),采集器会自动补全域名。
- 方法一 (推荐): 在“URL规则”中填写完整的 URL 模式,
- 场景: “下一页”的
-
分页规则无法匹配怎么办?
- 手动分析页面源码,看看“下一页”的链接到底是怎么生成的。
- 尝试用最简单的规则开始测试,比如只写 ,看看采集器生成的 URL 是什么,再逐步调整。
- 对于极其复杂的网站,可能 DedeCMS 的分页采集功能难以胜任,需要考虑其他更强大的采集工具或编写自定义脚本。
设置 DedeCMS 采集分页规则,关键在于观察规律和精准描述。
- 观察: 仔细分析目标网站分页 URL 的变化模式。
- 描述: 使用 URL规则 ( 通配符) 来描述简单的、可预测的规律。
- 补充: 对于复杂的、JS 动态生成的链接,使用 选择器 来精确定位。
- 保险: 设置一个合理的 最大页数 作为安全阀。
通过以上步骤,你就可以成功配置绝大多数网站的分页采集任务了。
