

# 如何檢查從網頁擷取的正文

把擷取的頁面文字與已儲存的來源 HTML 對照，以移除雜訊，同時保留重要事實。Actor 是託管的資料收集程式。Task 是已儲存的輸入預設。Actor 收集來源列，讀者負責分析。

HTML 是已儲存的頁面標記。程式庫是另行安裝、供讀者使用的程式碼。雜湊是檔案指紋，用來識別確切的已儲存複本。None 或空白輸出代表擷取未能提供結果。把已擷取的輸入、正文和擷取狀態分開；登入頁、挑戰頁或 HTML 外殼不是已取得的正文，而且沒有測試頁面繪製或隱藏存取。

## 檢查從網頁擷取的正文

1. 界定代理需要頁面上的哪些內容，以及哪些頁面區域不在該需要之內。這個方法針對擷取品質。
2. 如果需要尋找候選網址，使用公開的 Google Search Scraper build 1.0.15 Actor 和一個 Task。用一個預定搜尋片語取代整份已儲存的三項查詢樣本，設定使用 `queries` ["one intended phrase"]、`engines` ["bing"]、`maxResultsPerExecutedQuery` 2、`country` "US"、`language` "en"、`safeSearch` true，以及 `includeSponsoredResults` false。原生搜尋候選欄位包括 `engine`、`executedQuery`、`canonicalUrl`、`resultDomain`、`snippet`、`rank`、`page` 和 `observedAt`。輸出彙總紀錄包括 `queriesRequested`、`searchesCompiled`、`executionsPlanned`、`enginesRequested`、`enginesSuccessful`、`enginesFailed`、`pagesAttempted`、`pagesParsed`、`candidatesSeen`、`resultsSaved`、`engineStatusCounts`、`queryResultCounts` 和 `stopReason`。目前的兩列 Bing 對照傳回直接的 docs.python.org 候選網址，並帶有查詢、排名 1 和 2、頁碼 1，以及觀察時間，另外有一個已解析頁面，以及 stopReason `result_caps_reached`。它只核實範圍有限的候選項目，不核實目的地擷取、文字擷取，或其他引擎或市場。這裡只有 Bing 有已通過驗收的引擎證據。
3. 另行擷取一個獲准的目的地頁面，並保留其最終網址、擷取時間、內容類型和來源 HTML。搜尋 Actor 不會做這次擷取。核實已儲存的輸入確實包含預定的文章文字。把 `fetch_failure`、`body_not_in_saved_html` 和 `extraction_unavailable` 分開。
4. 在已記錄的版本和選項下，對該已儲存 HTML 另行執行一個文字擷取程式庫。原始的本機 HTML 測試樣本，曾以已安裝的 2.0.0 版、用 `trafilatura.extract(html, include_comments=False)` 測試。注意，目前文件描述的是 2.3.1 版，因此這些版本事實必須分開。
5. 在驗收輸出之前，先界定幾項來源檢查：必要的標題或段落、否定或條件、數字及其單位，以及被排除的導覽、頁尾或留言。比較已儲存 HTML 和傳回的文字。遺漏的單位或缺失的否定，都可以把意思反轉。
6. 把每項檢查記錄為 retained、changed、missing、unwanted_noise_present 或 cannot_resolve，並附上確切來源定位和擷取段落。只在有用時才計算已檢查事實的數目。
7. 如果一項關鍵檢查失敗，覆核已儲存 HTML 和擷取設定，而不要把損毀的文字交給代理。
8. 儲存一份精簡擷取紀錄：來源網址和擷取情境、HTML 參照或雜湊、擷取器版本和選項、輸出參照、檢查表，以及決定。

原始的虛構完整已儲存 HTML 測試樣本：「Fictional tray guide」的已儲存 HTML 有導覽、登入和頁尾區塊、一篇文章，以及一個留言區。文章寫道：「Do not add water until the tray is level」以及「Use 12 milliliters of water for this fictional demonstration.」。留言和選單包含無關詞語。這個測試樣本沒有即時擷取任何目的地。

| 檢查項目 | 已儲存 HTML 內容 | 擷取文字輸出 | 狀態 |
| --- | --- | --- | --- |
| 必要標題 | Fictional tray guide | Fictional tray guide | 已保留 |
| 否定／條件 | Do not add water until the tray is level | Do not add water until the tray is level | 已保留 |
| 數字和單位 | 12 milliliters | 12 milliliters | 已保留 |
| 導覽標記 | NavigationMarker | 不存在 | 讀者建立的檢查：不需要的雜訊不存在 |
| 頁尾標記 | FooterMarker | 不存在 | 讀者建立的檢查：不需要的雜訊不存在 |
| 留言標記 | CommentsMarker | 不存在 | 讀者建立的檢查：不需要的雜訊不存在 |

已安裝的 2.0.0 版擷取器呼叫產生了非空白正文。像「Add water. Use 12」這樣的假設輸出會使兩項檢查失敗，因為必要的否定和條件已改變，而且數字的單位缺失。假設輸出為空白，會標成 `extraction_unavailable`，而不是一篇事實為零的文章。

## 下一步行動

在驗收文字之前，用另行擷取並儲存的 HTML，以及另行產生的擷取輸出，核對一項關鍵來源指示和一個雜訊標記。只在需要可選的 Bing 候選項目時，才使用 Google Search Scraper [Actor](https://apify.com/chronometrica/google-search-scraper) 和 [Task](https://apify.com/chronometrica/google-search-scraper/examples/web-search-citation-sources)。搜尋 Actor 不會審閱或核實已擷取的目的地文字。

## 來源與延伸閱讀

- [Trafilatura 快速入門：](https://trafilatura.readthedocs.io/en/latest/quickstart.html)
- [Trafilatura Python 用法：](https://trafilatura.readthedocs.io/en/latest/usage-python.html)
- [網頁擷取器討論：](https://www.reddit.com/r/LangChain/comments/1cf2dwc/what_web_scraper_for_web_search_agent/)