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

PHP 簡易內容采集器開發實戰:file_get_contents + 正則提取 + 入庫存儲

     編輯:PHP 綜合知識

采集器核心原理

遠程獲取目標頁面 → 正則提取所需字段 → 入庫或生成靜態頁。核心函數:file_get_contents() (PHP 5+) + preg_match_all()。

實戰目標:小說站采集

目標站:八路中文網 (86zw.com),采集《回到明朝當王爺》為例。

步驟 1:構造書目頁 URL

# 規律:https://www.86zw.com/Book/{書號}/Index.aspx
$number = $_POST['number'];  // 用戶輸入書號
$url = "https://www.86zw.com/Book/$number/Index.aspx";

步驟 2:提取書名、作者、分類

$content = file_get_contents($url);

// 書名:<span class="booktitle">《書名》</span>
preg_match_all('/<span class="booktitle">(.*?)<\/span>/is', $content, $title);
// $title[1][0] 為書名

// 作者、分類同理,根據頁面結構編寫正則

步驟 3:獲取章節列表頁

# 章節列表規律:https://www.86zw.com/Html/Book/{分類號}/{書號}/List.shtm
// 從書目頁提取分類號
preg_match_all('/Html\/Book\/[0-9]+\/[0-9]+\/List\.shtm/is', $content, $typeid);

// 切取函數
function cut($string, $start, $end) {
    $msg = explode($start, $string);
    $msg = explode($end, $msg[1]);
    return $msg[0];
}

$start = "Html/Book/";
$end = "List.shtm";
$typeid = cut($typeid[0][0], $start, $end);
$typeid = explode("/", $typeid);  // $typeid[0] = 分類號

步驟 4:遍歷章節采集內容

$listUrl = "https://www.86zw.com/Html/Book/{$typeid[0]}/$number/List.shtm";
$listContent = file_get_contents($listUrl);

// 提取章節鏈接
preg_match_all('/<a href="([^"]+)">(.*?)<\/a>/is', $listContent, $chapters);
// $chapters[1] = 章節URL, $chapters[2] = 章節標題

foreach ($chapters[1] as $idx => $chapterUrl) {
    $chapterContent = file_get_contents($chapterUrl);
    // 正則提取正文內容...
    // 入庫:INSERT INTO chapters (book_id, title, content, sort) VALUES ...
    // 或生成靜態:file_put_contents("book/$number/$idx.html", $content);
}

關鍵工具函數

// 通用切取函數
function cut($string, $start, $end) {
    $msg = explode($start, $string);
    if (isset($msg[1])) {
        $msg = explode($end, $msg[1]);
        return $msg[0];
    }
    return '';
}

生產級擴展建議

  1. 異步隊列:Redis/RabbitMQ 解耦采集與存儲
  2. 去重機制:URL 指紋集合防重複采集
  3. 反反爬蟲:User-Agent 池、IP 代理池、隨機延遲
  4. 增量采集:記錄最後采集章節 ID,下次從斷點續傳
  5. 規則配置化:正則/選擇器存入數據庫,支持可視化規則管理
  6. 異常監控:采集失敗告警、成功率統計

法律提醒:采集前請確認目標站點 robots.txt 與服務條款,尊重版權,合規使用數據。

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