首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 批量檢測頁面是否被百度收錄

     編輯:PHP 綜合知識

若需檢查大量網頁是否被百度收錄,逐一使用 site: 指令極其低效。本文提供 PHP + cURL 實現的批量檢測方案,可快速自動化完成收錄狀態查詢。

核心檢測函式

<?php
/**
 * 檢測網頁是否被百度收錄
 * @param string $url 待檢測網址
 * @return int 1=已收錄, 0=未收錄
 */
function checkBaiduInclude($url) {
    $url = 'https://www.baidu.com/s?wd=' . urlencode($url);
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    // 建議加上 User-Agent 避免被封
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; Baiduspider/2.0)');
    $rs = curl_exec($curl);
    curl_close($curl);

    // 百度未收錄頁面會出現「抱歉,沒有找到」
    if (!strpos($rs, '抱歉,沒有找到')) {
        return 1;
    } else {
        return 0;
    }
}
?>

使用範例

<?php
$urls = [
    'https://www.example.com/article/1.html',
    'https://www.example.com/article/2.html',
    'https://www.example.com/article/3.html',
];

foreach ($urls as $url) {
    $result = checkBaiduInclude($url);
    echo $url . ' => ' . ($result ? '已收錄' : '未收錄') . "\n";
    // 禮貌延遲,避免請求過快被封 IP
    sleep(1);
}
?>

實務優化建議

  1. 加入請求標頭偽裝:設定 CURLOPT_USERAGENT、CURLOPT_REFERER 降低被封風險
  2. 錯誤處理機制:檢查 curl_errno()、curl_getinfo($curl, CURLINFO_HTTP_CODE) 處理網路異常
  3. 並發請求:使用 curl_multi_exec 實現並發,大幅提升批量檢測速度
  4. 結果快取:將檢測結果寫入資料庫或檔案,避免重複查詢
  5. IP 代理池:大量查詢時輪換代理 IP,防止單一 IP 被百度封禁

並發版本雛形

<?php
function checkBaiduMulti($urls) {
    $mh = curl_multi_init();
    $handles = [];

    foreach ($urls as $i => $url) {
        $ch = curl_init('https://www.baidu.com/s?wd=' . urlencode($url));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
        curl_multi_add_handle($mh, $ch);
        $handles[$i] = $ch;
    }

    $running = null;
    do {
        curl_multi_exec($mh, $running);
    } while ($running);

    $results = [];
    foreach ($handles as $i => $ch) {
        $content = curl_multi_getcontent($ch);
        $results[$urls[$i]] = strpos($content, '抱歉,沒有找到') === false ? 1 : 0;
        curl_multi_remove_handle($mh, $ch);
    }
    curl_multi_close($mh);
    return $results;
}
?>

提醒:頻繁抓取百度搜尋結果可能違反其服務條款,建議控制頻率、使用代理 IP,或改用百度站長平台提供的官方 API(如有權限)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved