feat(public): 实现按数量抓取多页数据功能

在普通模式下,支持根据用户指定的数量抓取多页列表数据,直到满足所需数量或达到最大页数限制。增加分页请求逻辑与延时控制,提升数据获取稳定性。

feat(server): 改进详情页解析与预算金额提取逻辑

增强标题、发布时间和正文内容的选择器容错能力,支持多种页面结构。优化预算金额提取规则,引入优先级匹配机制,并支持元转万元计算,提高数据准确性。
```
This commit is contained in:
2025-12-14 19:21:19 +08:00
parent 83a8a3bb9a
commit 745faa0ecc
2 changed files with 146 additions and 27 deletions

View File

@@ -134,10 +134,42 @@ async function fetchDetails() {
listData = await dateRangeResponse.json();
} else {
// 普通模式
// 普通模式 - 按数量抓取多页
const url = document.getElementById('detailUrl').value;
const listResponse = await fetch(`${API_BASE}/list?url=${encodeURIComponent(url)}`);
listData = await listResponse.json();
const limit = parseInt(document.getElementById('detailLimit').value);
// 抓取多页直到获得足够数量
const allItems = [];
let page = 1;
const maxPagesToFetch = Math.ceil(limit / 10) + 1; // 假设每页约10条
while (allItems.length < limit && page <= maxPagesToFetch) {
const listResponse = await fetch(`${API_BASE}/list?url=${encodeURIComponent(url)}&page=${page}`);
const pageData = await listResponse.json();
if (!pageData.success) {
if (allItems.length === 0) {
results.innerHTML = `<div class="error">错误: ${pageData.error}</div>`;
loading.classList.remove('active');
return;
}
break;
}
if (pageData.data.length === 0) {
break;
}
allItems.push(...pageData.data);
page++;
// 如果还需要更多数据且未到达上限,稍作延迟
if (allItems.length < limit && page <= maxPagesToFetch) {
await new Promise(resolve => setTimeout(resolve, 500));
}
}
listData = { success: true, data: allItems };
}
if (!listData.success) {