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

PHP 簡易文章采集器:基於 file_get_contents 與正則提取的輕量級實現

     編輯:PHP 相關知識

專案定位

一個極簡的 PHP 單檔采集腳本,適用於靜態/偽靜態頁面、結構固定、無反爬、小規模一次性采集任務。核心流程:HTTP GET 抓取 HTML → 正則提取 <title> 與內容區塊 (指定開始/結束標記) → 簡易清洗 (去標籤、實體解碼) → 儲存靜態檔案。

完整程式碼 (重構增強版)

<?php
/**
 * 簡易文章采集器
 * 配置區塊請根據目標站點修改
 */
class SimpleArticleScraper {
    // ===== 配置 =====
    private $targetUrl = 'https://example.com/article/123.html';
    private $startMarker = '
'; // 內容區塊起始特徵 private $endMarker = '

核心邏輯圖解


flowchart TD
    A[開始] --> B{抓取 HTML}
    B -- 失敗 --> C[記錄錯誤/重試] --> Z[結束]
    B -- 成功 --> D[提取 Title]
    D --> E[定位內容區塊
startMarker ~ endMarker] E -- 失敗 --> C E -- 成功 --> F[HTML 清洗
去標籤/實體/絕對化圖片] F --> G[生成安全檔名] G --> H[寫入檔案] H --> I[成功/失敗日誌] I --> Z

關鍵技術難點與對策

難點簡易版缺陷進階解決方案
內容區塊定位靠固定字串 Marker,網站改版即失效XPath/CSS Selector (DOMDocument, Symfony DomCrawler) + 多備選選擇器 + 相似度比對
分頁/列表采集僅支援單頁列表頁提取連結 → 隊列逐個采集 → 入庫去重
反爬蟲無應對,極易被封代理 IP 池、請求指紋偽裝、Headless Chrome、驗證碼識別 API
動態渲染 (JS)file_get_contents 拿不到 JS 生成內容Puppeteer/Playwright (Node/Python) 或 PHP spatie/browsershot
編碼混亂簡易偵測強制 mb_convert_encoding、Encoding::toUTF8() (voku/portable-utf8)
大量采集效能同步阻塞,極慢Swoole/OpenSwoole 協程並發、Guzzle cURL Multi、Gearman/RabbitMQ 隊列

生產級采集架構建議

  1. 調度層:Crontab / Laravel Scheduler / Celery Beat 定時觸發。
  2. 任務隊列:Redis Lists / RabbitMQ / Kafka 存放待采集 URL (優先級、重試次數)。
  3. Worker 消費者:Swoole 協程 / PHP-FPM + Supervisor / Go/Rust 高併發服務。
  4. 抓取引擎:Guzzle (靜態) + Browsershot (動態) + 代理中介軟體。
  5. 解析層:配置化選擇器 (YAML/JSON) + 版本管理 + 變更告警。
  6. 去重/存儲:Bloom Filter / Redis Set / DB Unique Key 去重 → MySQL/ES/MinIO 存儲。
  7. 監控告警:成功率、耗時、IP 存活率、目標站結構變更偵測 (DOM 雜湊比對)。

法律合規紅線 (必讀)

⚖️ 采集 ≠ 合法

  • 遵守 robots.txt (User-agent, Disallow, Crawl-delay)。
  • 檢查網站 Terms of Service,明文禁止采集者法律風險極高。
  • 勿采集個人隱私 (姓名、電話、身分證、醫療、金融數據) — 違反 GDPR/個資法/網安法。
  • 勿大規模高頻請求導致目標服務癱瘓 — 可能構成破壞計算機信息系統罪。
  • 采集內容僅供個人研究/搜尋引擎索引,嚴禁商業轉載、訓練 AI 模型未授權數據。

結語

本簡易采集器適合理解「抓取 → 解析 → 清洗 → 存儲」基礎流程。實務中,請勿直接用於生產,應採用 Scrapy (Python)、Colly (Go)、Crawlee (Node.js) 等成熟框架,或商業級采集平台 (Bright Data, Apify, Octoparse),並在法律顧問指導下合規操作。

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