红穆笔记
首頁 語言筆記 網站廣告違禁詞處理實戰:Python掃描 + 寶塔防火牆過濾 + 詞庫管理
語言筆記 PHP PHP與mysql

網站廣告違禁詞處理實戰:Python掃描 + 寶塔防火牆過濾 + 詞庫管理

网站广告违禁词处理实战:Python扫描 + 宝塔防火墙过滤 + 词库管理

網站廣告違禁詞處理實戰:Python掃描 + 寶塔防火牆過濾 + 詞庫管理

作者:紅穆(QQ:1810216796)
首發:紅穆筆記
GitHubhttps://github.com/1810216796(完整源碼)


📌 背景

近期接到客戶反饋,網站因頁面中包含“第一”、“最佳”、“國家級”等廣告法違禁詞,被市場監管部門約談並罰款。這些詞彙散落在數百個頁面中,人工排查耗時費力,且容易遺漏。爲解決這一痛點,我設計了一套自動化掃描系統,利用 Python 爬蟲遞歸掃描全站,配合精細化的違禁詞庫和白名單機制,每天自動全量掃描,並生成可視化監控面板,讓違規內容無所遁形。

本文將從原理到部署,完整分享這套方案的所有代碼與使用心得。


🧠 整體思路

  1. 詞庫構建:整理廣告法明令禁止的絕對化用語、醫療功效詞、金融承諾詞等,同時加入上下文白名單,避免誤判(如“世界級文化遺產”屬於客觀描述,不判違規)。
  2. 爬蟲掃描:Python 腳本多線程併發爬取網站所有頁面,提取可見文本,匹配違禁詞,記錄違規頁面及上下文。
  3. 增量 & 全量:默認增量掃描(跳過已掃 URL),每日凌晨觸發一次 --reset 全量掃描,確保所有新頁面都被覆蓋。
  4. 監控守護:Shell 腳本每分鐘檢查一次掃描進程,若卡死則自動重啓,保證 7×24 小時穩定運行。
  5. 可視化面板:PHP 頁面即時展示今日掃描頁數、違規數、運行狀態、各站點統計及違禁詞聚合,方便運維人員隨時查看。
  6. 寶塔防火牆聯動:通過 rules.txt 詞庫,自動更新寶塔防火牆配置,實現訪問時即時替換違禁詞,從源頭過濾。

🔧 環境準備

  • 服務器:CentOS / Ubuntu,2 核 4G 以上(內存建議 ≥2G)
  • Python 3.6+,需安裝依賴:
    1. pip3 install requests beautifulsoup4 lxml
  • PHP 7.4+(用於監控面板)
  • Nginx / Apache(託管 PHP 面板)
  • 寶塔面板(如需使用防火牆替換功能)

📂 目錄結構(GitHub 倉庫)

  1. ad-violation-scanner/
  2. ├── sacn_site.py # 核心掃描腳本(支持增量/全量)
  3. ├── index.php # 即時監控面板
  4. ├── update_ads.py # 寶塔防火牆詞庫更新腳本
  5. ├── rules.txt # 替換詞庫(違禁詞=替換詞)
  6. ├── 寶塔定時任務.sh # 一鍵創建定時任務
  7. ├── scan_monitor.sh # 進程守護腳本(可選)
  8. ├── .user.ini # PHP open_basedir 限制
  9. └── README.md # 詳細使用說明

源碼已開源在 GitHub:https://github.com/1810216796


🐍 Python 掃描腳本(sacn_site.py)

核心原理

  • 使用 ThreadPoolExecutor 控制併發數(默認 20),平衡速度與服務器負載。
  • requests.Session 掛載重試機制,超時 45 秒,自動重試 2 次。
  • 對每個頁面提取可見文本(剔除 script、style),通過正則匹配違禁詞。
  • 上下文白名單過濾,避免“最高峯”、“全國第一(地理描述)”等誤報。
  • 遞歸爬取同域名下的所有頁面,過濾靜態資源(css/js/圖片等)和指定參數。
  • 即時保存已掃描 URL(scanned_urls.txt)和違規記錄(violations_results.txt),支持中斷恢復。
  • 掃描完成後生成 index.html 彙總報告。

關鍵參數

參數說明
max_workers併發線程數,默認 20,可調
session.timeout請求超時時間(秒),設爲 45
Retry(total=2)重試次數,避免網絡抖動
--reset清空歷史記錄,全量掃描

違禁詞庫與白名單

  • 違禁詞庫:覆蓋廣告法絕對化用語、醫療功效、金融承諾、旅遊行業違規詞等 200+ 關鍵詞。
  • 白名單:通過正則匹配上下文,如“世界級文化遺產”、“全國第一高峯”等客觀描述不判違規。

🛡️ 進程守護與定時任務

scan_monitor.sh(可選)

每分鐘檢查一次掃描進程:

  • 若進程不存在,自動拉起增量掃描。
  • 若距離上次全量掃描超過 24 小時,自動執行 --reset 全量掃描。
  • 檢測卡死(日誌超時未更新且頁面數不增長),自動重啓。

crontab 配置

# 每分鐘監控掃描進程(需要 scan_monitor.sh)
* * * * * /bin/bash /path/to/scan_monitor.sh >> /path/to/monitor_cron.log 2>&1
# 每日凌晨2點更新寶塔防火牆詞庫(替換規則)
0 2 * * * /usr/bin/python3 /path/to/update_ads.py >> /path/to/update_cron.log 2>&1


📊 PHP 即時監控面板(index.php)

功能

  • 即時數據:今日掃描頁數(讀取 scanned_urls.txt 行數)、今日違規數(統計 violations_results.txt 中 URL: 次數)。
  • 運行狀態:根據 scan.log 最後修改時間判斷進程是否存活。
  • 站點總覽:展示各站點已掃描頁數、違禁詞類型數、問題頁面數等。
  • 違禁詞聚合:點擊站點,展示該站點所有違禁詞及出現次數,點擊詞條可查看詳細上下文。
  • 自動刷新:每 1 秒通過 AJAX 更新數據,無需手動刷新。

部署

將 index.php 放在網站目錄下,確保 PHP 可讀寫同目錄下的 .txt 和 .log 文件。訪問 http://your-domain/index.php 即可。


🔥 寶塔防火牆詞庫自動替換(核心亮點)

工作原理

寶塔防火牆的 body_character_string 字段支持對響應內容進行關鍵詞替換。我們利用這一特性,將違禁詞映射爲合規詞,用戶訪問時無感知替換,不影響正常瀏覽。

詞庫文件 rules.txt

每行一個替換規則,格式爲 違禁詞=替換詞。例如:

  1. 最佳=較佳
  2. 第一=首先
  3. 國家級=知名
  4. 100%=全部
  5. 治療=調理

更新腳本 update_ads.py

  • 備份:自動備份原配置文件到 /www/server/btwaf/backup/
  • 合併:讀取 rules.txt,更新 body_character_string 字段(保留已有規則)。
  • 重載:自動執行 nginx -s reload 或 systemctl reload httpd,使配置生效。

定時執行

建議每天凌晨執行一次,保持詞庫最新。

0 2 * * * /usr/bin/python3 /path/to/update_ads.py >> /path/to/update_cron.log 2>&1

🚀 部署實戰(完整步驟)

1. 克隆代碼

git clone https://github.com/1810216796/ad-violation-scanner.git
cd ad-violation-scanner

2. 安裝 Python 依賴

pip3 install requests beautifulsoup4 lxml

3. 配置掃描目標

編輯 sacn_site.py,修改 WEBSITES 列表:

WEBSITES = [
{"name": "客戶網站", "urls": ["https://www.example.com/"]},
]

4. 配置替換詞庫

編輯 rules.txt,添加需要替換的違禁詞及對應替換詞。

5. 設置定時任務

chmod +x 寶塔定時任務.sh
./寶塔定時任務.sh
# 按提示選擇 1(監控守護)或 2(防火牆更新)

6. 配置 Web 訪問

將 index.php 和 .user.ini 放在網站根目錄,確保目錄權限正確。

7. 首次手動啓動(可選)

nohup python3 sacn_site.py > scan.log 2>&1 &

監控腳本會在下一分鐘接管。


📈 效果展示

  • 監控面板:即時顯示“今日掃描”和“今日違規”數字,每秒更新。
  • 違規聚合:點擊站點,所有違禁詞一目瞭然,點擊詞條直接顯示具體頁面及上下文,方便定位修改。
  • 掃描報告:每次掃描結束自動生成 index.html,含站點、URL、違禁詞詳情,可存檔備查。
  • 防火牆替換:訪問頁面時,違禁詞被自動替換,用戶體驗無感知,合規性大幅提升。

⚠️ 注意事項

  1. 併發控制:根據服務器性能調整 max_workers,避免過高導致目標網站或本地資源耗盡。建議從 10 開始逐步上調。
  2. 詞庫維護:廣告法不斷更新,需定期維護 rules.txt 和 EXACT_FORBIDDEN_WORDS,避免漏判或誤判。
  3. 超時與重試:網絡環境不穩定時,可適當增加 timeout 和 total 重試次數,但避免無限重試。
  4. 寶塔版本update_ads.py 基於寶塔 7.x 開發,其他版本可能字段名不同,使用前請先備份驗證。
  5. 權限安全:監控面板建議設置訪問密碼或僅限內網訪問,避免敏感信息泄露。

🐛 常見問題

Q:掃描卡住不動怎麼辦?
A:監控腳本會自動重啓(如果配置了 scan_monitor.sh),也可手動 pkill -f "python3 sacn_site.py" 終止進程。

Q:防火牆替換不生效?
A:檢查 rules.txt 格式是否正確(= 前後無多餘空格),確認寶塔防火牆已開啓“響應內容替換”功能,並重載 Web 服務。

Q:PHP 面板顯示“今日掃描 0”?
A:確保 scanned_urls.txt 存在且有內容,檢查目錄權限(PHP 需可讀),並確認掃描腳本已運行。

Q:如何只增量掃描不重置?
A:直接執行 python3 sacn_site.py(不加 --reset)即可增量掃描,自動跳過已掃描 URL。


💬 結語

這套方案已在我多個客戶項目中穩定運行,累計掃描頁面數十萬,有效幫助規避廣告法風險。核心在於詞庫精準 + 上下文白名單 + 自動化監控 + 防火牆聯動,既減少了人工成本,又提高了合規性。

如果你也有類似需求,歡迎參考本文實現。源碼已開源在 GitHub,歡迎 Star、Fork、提 Issue。

作者:紅穆
QQ:1810216796
GitHubhttps://github.com/1810216796


本文首發於紅穆筆記,轉載請註明出處。

微信赞赏

微信

支付宝赞赏

支付寶

✍️ 作者: 紅穆

網站管理員 · 感謝閱讀,更多精彩內容敬請關注

作者主頁 查看主頁 →

相關文章

PHP强制转换类型

PHP強制轉換類型 語言筆記 PHP PHP採集 PHP與mysql

獲取數據類型1.如果想查看某個表達式的值和類型,用var_dump()。 2.如果只是想得到一個易讀懂的類型的表達方式用於調試,用 gettype()。3.要查看某個類型,不要用 gettype(),而用is_type() 函數。字符串轉換爲數值當一個字符串被當作數字來求值時,根據以下規則來決定結果…
👁 232
php 特殊字符转义与还原

php 特殊字符轉義與還原 語言筆記 PHP PHP採集 PHP與mysql

轉義字符是一種特殊的字符常量。轉義字符以反斜線""開頭,後跟一個或幾個字符。轉義字符具有特定的含義,不同於字符原有的意義,故稱“轉義”字符。轉義字符的用處1:將普通字符轉爲特殊用途,如後退鍵,回車鍵等。2:用來將特殊意義的字符轉換回它原來的意義。3:在數據寫入數據庫前,都會使用轉義字符(函…
👁 180
PHP mysqli

PHP mysqli 語言筆記 PHP PHP採集 PHP與mysql

執行鍼對數據庫的查詢:刪除數據庫<?php // 假定數據庫用戶名:root,密碼:123456,數據庫:RUNOOB $con=mysqli_connect("localhost","root","123456","RUN…
👁 232
PHP中mysqli

PHP中mysqli 語言筆記 PHP PHP採集 PHP與mysql

mysqli_num_rows()這個函數只用於SELECT查詢方法而mysqli_affected_rows()函數是記錄上一個sql語句對整個數據庫的影響從而把受影響的數據個數返回,這個主要用於INSERT(插入)、UPDATE(替換)、DELETE(刪除)。
👁 145

推薦閱讀

(自适应手机版)响应式容器类网站pbootcms模板 html5容器设备网站源码下载 0456

(自適應手機版)響應式容器類網站pbootcms模板 html5容器設備網站源碼下載 0456 實用收藏 pbootcms模板

一款自適應手機端的居家用品紙盤紙杯與生活日用品生產PbootCMS網站模板。設計風格清新實用,適合展示紙製品、一次性餐具及日用百貨產品。有助於日用品生產廠家在線上展示產品線,拓展批發渠道。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5…
👁 53
(独立手机版)单页落地页推广网站模板 - 带复制微信号 1016

(獨立手機版)單頁落地頁推廣網站模板 - 帶複製微信號 1016 實用收藏 pbootcms模板

一款獨立手機版單頁落地頁推廣PbootCMS網站模板,帶複製微信號功能。設計風格營銷導向強,適合微信營銷、社羣推廣等高轉化率落地頁。有助於企業快速搭建移動端推廣頁面,方便用戶複製微信號進行轉化。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.…
👁 57
安防监控类网站模板 0419

安防監控類網站模板 0419 實用收藏 易優模板

一款針對安防監控類行業的eyoucms網站模板。設計風格科技安全,能夠展示監控設備、安防系統、解決方案及工程案例。有助於安防科技企業在線上展示產品,吸引商業與政府客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優CMS…
👁 59
响应式智能科技设备类网站模板 1014

響應式智能科技設備類網站模板 1014 實用收藏 易優模板

一款針對智能科技設備類企業的eyoucms響應式網站模板。設計風格科技前沿,能夠展示智能設備產品、技術方案及應用場景。有助於智能科技企業在線上樹立創新品牌形象,吸引投資與客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易…
👁 36
(自适应手机版)响应式简繁双语黑色轴承齿轮机械制造企业pbootcms模板 机械齿轮设备网站源码下载 0457

(自適應手機版)響應式簡繁雙語黑色軸承齒輪機械製造企業pbootcms模板 機械齒輪設備網站源碼下載 0457 實用收藏 pbootcms模板

本套自適應手機端的響應式品牌策劃類PbootCMS網站模板。設計風格創意戰略,適合品牌策劃公司、企劃機構展示方法論與成功案例。有助於策劃機構在線上展示專業能力,吸引企業客戶。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.cn相關文章…
👁 39
(自适应手机端)响应式汽车零配件五金机械英文外贸网站模板 1017

(自適應手機端)響應式汽車零配件五金機械英文外貿網站模板 1017 實用收藏 pbootcms模板

一款響應式汽車零配件五金機械英文外貿PbootCMS網站模板,支持PC與WAP端。設計風格專業國際,適合汽配五金外貿企業展示產品與出口優勢。有助於中國汽配企業在全球市場上進行品牌推廣。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.c…
👁 48