```
feat(public): 实现按数量抓取多页数据功能 在普通模式下,支持根据用户指定的数量抓取多页列表数据,直到满足所需数量或达到最大页数限制。增加分页请求逻辑与延时控制,提升数据获取稳定性。 feat(server): 改进详情页解析与预算金额提取逻辑 增强标题、发布时间和正文内容的选择器容错能力,支持多种页面结构。优化预算金额提取规则,引入优先级匹配机制,并支持元转万元计算,提高数据准确性。 ```
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user