You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现PHP SEO爬虫自动增量处理谷歌表格域名批量任务?

自动增量批量处理爬虫任务的可行方案

针对你的PHP爬虫批量处理300个站点时的超时问题,以下是几个无需手动修改参数的自动增量处理方案:

方案1:利用Google Sheet状态列追踪进度(推荐)

直接在存储域名的Sheet中新增一列(比如B列)作为「处理状态」,值可选「未处理」「处理中」「已完成」。脚本每次启动时自动筛选出未处理的域名,取前5个处理,完成后更新状态,全程无需手动干预。

核心代码示例:

// 初始化Google Sheets服务(假设你已完成API授权)
$service = new Google_Service_Sheets($client);
$spreadsheetId = '你的表格ID';

// 1. 筛选未处理的前5个域名及对应行号
$range = 'Sheet1!A2:B'; // A列存域名,B列存处理状态
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();

$pendingDomains = [];
$targetRows = [];
foreach ($values as $index => $row) {
    // 未设置状态或状态为未处理的域名
    if (!isset($row[1]) || $row[1] !== '已完成') {
        $pendingDomains[] = $row[0];
        $targetRows[] = $index + 2; // 转换为Sheet的行号(表头是第1行)
        if (count($pendingDomains) >= 5) break;
    }
}

// 无待处理域名时终止脚本
if (empty($pendingDomains)) {
    echo "所有站点处理完成";
    exit;
}

// 2. 标记选中的域名为「处理中」(避免重复处理)
$updateRange = 'Sheet1!B' . implode(':B', $targetRows);
$updateBody = new Google_Service_Sheets_ValueRange([
    'values' => array_fill(0, count($pendingDomains), ['处理中'])
]);
$service->spreadsheets_values->update(
    $spreadsheetId,
    $updateRange,
    $updateBody,
    ['valueInputOption' => 'USER_ENTERED']
);

// 3. 批量处理SEO检测
foreach ($pendingDomains as $site) {
    getAllPagesSEO($site);
}

// 4. 更新状态为「已完成」
$updateBody->setValues(array_fill(0, count($pendingDomains), ['已完成']));
$service->spreadsheets_values->update(
    $spreadsheetId,
    $updateRange,
    $updateBody,
    ['valueInputOption' => 'USER_ENTERED']
);

方案2:本地文件存储处理进度

创建一个本地文本文件记录上次处理到的Sheet行号,脚本启动时读取该值,从对应行开始取5个域名,处理完成后更新行号。

核心代码示例:

$progressFile = './crawl_progress.txt';
$startRow = file_exists($progressFile) ? (int)file_get_contents($progressFile) : 2; // 从第2行开始(跳过表头)
$spreadsheetId = '你的表格ID';
$service = new Google_Service_Sheets($client);

// 读取下一批5个域名
$endRow = $startRow + 4;
$range = "Sheet1!A{$startRow}:A{$endRow}";
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$domains = array_column($response->getValues(), 0);

// 无域名可处理时清理进度文件并终止
if (empty(array_filter($domains))) {
    echo "所有站点处理完成";
    unlink($progressFile);
    exit;
}

// 处理这批域名
foreach ($domains as $site) {
    getAllPagesSEO($site);
}

// 更新进度到文件
file_put_contents($progressFile, $endRow + 1);

额外优化建议

  • 用CLI模式运行脚本:CLI环境下PHP的默认超时限制更宽松,也可通过set_time_limit(0)取消超时限制,避免中途中断。
  • 增加单站点处理延迟:在getAllPagesSEO函数末尾添加sleep(1)或类似延迟,降低目标服务器的请求压力,同时减少脚本超时概率。
  • 异常捕获:在处理每个站点时加入try-catch块,避免单个站点爬取失败导致整批任务中断,同时可在Sheet中新增「错误信息」列记录失败原因。

内容的提问来源于stack exchange,提问作者Alex Douglas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:12:41