若需檢查大量網頁是否被百度收錄,逐一使用 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);
}
?>
CURLOPT_USERAGENT、CURLOPT_REFERER 降低被封風險curl_errno()、curl_getinfo($curl, CURLINFO_HTTP_CODE) 處理網路異常curl_multi_exec 實現並發,大幅提升批量檢測速度<?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(如有權限)。