連結擷取工具會從貼上的 HTML 原始碼中拉出所有 PDF 的 href,每行回傳一個網址,合併重複項目並過濾掉可執行的協定,全程在您的瀏覽器中執行。當任務是擷取指向 PDF 的連結時,實際工作發生在頁面原始碼中——也就是藏在錨點標籤、area 元素或 link 元素裡的真實網址——而不是渲染後的頁面。大多數搜尋這個關鍵字的使用者,手上都有一份儲存的 HTML 檔案、一個可以檢視原始碼的公開網頁,或是 CMS 匯出檔,他們想要一份乾淨的清單,列出所有 PDF 目的地,而不是手動掃描一整頁的標記。這個 連結擷取工具 以三個動作完成任務:掃描三個帶有連結的起始標籤中的 href 屬性,解碼網址中常見的字元實體參考,然後根據選填的基礎網址將值標準化,讓相對路徑變成絕對網址。沒有任何資料會離開瀏覽器。這個工具不會對它回傳的任何網址發出請求,這才是正確的行為——對一份不應接觸第三方伺服器或不應引發隱私疑慮的稽核作業來說。結果就是一份可以貼到試算表、爬蟲或重新導向檢查工具中,作為下一階段審查的清單。

extract link to pdf
從 HTML 原始碼擷取指向 PDF 的連結

這個工具實際對 PDF 連結做了什麼

當您要求擷取工具讀取一個 HTML 頁面時,它會走訪原始碼,在三個特定的起始標籤上尋找 href 屬性:錨點 (a)、area 和 link。這對 PDF 探索來說很重要,因為 PDF 不只透過一般的錨點標籤來連結。一個帶有 rel="alternate" 的 link 元素放在文件 head 中,可以指向該篇文章的 PDF 版本;放在影像地圖內的 area 元素,則可以將某個點擊區域導向一份可下載的型錄。透過掃描這三種元素類型,這個工具建立的是一份完整的原始碼清單,而非局部的清單。

解析器也會解碼 href 值中一組有限的 HTML 字元參考:十進位和十六進位的數字形式,加上命名實體 amp、quot、apos、lt 和 gt。PDF 網址經常在查詢參數中包含 & 符號,而屬性值中的 & 符號在原始碼中通常會以命名實體撰寫。把該命名實體解碼回字面的 & 符號,就能產生瀏覽器實際會使用的網址。這個實作刻意不做成完整的 HTML 實體資料庫——罕見的命名參考會保持編碼狀態,這比默默套用一張猜測的對照表來得好。

解碼之後,擷取工具會標準化目標。絕對的 HTTP、HTTPS、mailto 和 tel 值會直接通過。以根目錄為基準、相對路徑、上層目錄相對和協定相對的值,則使用瀏覽器的 URL 模型,根據選填的基礎網址進行解析。指向同一個絕對 PDF 的兩個相同相對連結,在標準化之後會合併成單一項目。郵件和電話目標會保留,因為它們是合法的連結目的地,即使它們不是網頁。第一次出現的順序會被保留,這在您想要比對擷取工具的輸出與連結在原始碼中出現順序時很有用。

貼上之前:在 HTML 中要檢查的事項

擷取工具處理的是您提供的文字。貼上之前,有三個條件決定了這個工具能找到什麼。

第一,原始碼必須來自您有權檢視的頁面。這個工具無法擷取遠端網址,因為任意的跨來源請求經常會被阻擋,而默默連線到貼上的連結會造成隱私和安全問題。請透過瀏覽器的「檢視原始碼」動作複製頁面原始碼、儲存 CMS 匯出檔,或執行您自己有權限的爬蟲。擷取工具不會記錄或傳輸您貼上的任何內容,但存取原始碼的法律責任仍歸屬於您。

第二,輸入上限為 200,000 個字元,以保持互動式掃描在可控範圍內。一般的產品頁面都遠低於這個上限。非常長的文件應該要分割,或使用可控管的爬蟲來處理。

第三,這個工具會在掃描前移除註解和常見的原始文字容器——script、style、textarea、title、iframe、noembed 和 noframes。這能避免那些只是看起來像錨點標記的字串(藏在 JavaScript 或字面文字中)被誤判為連結。取捨在於,擷取工具是原始碼解析器,而不是完整的瀏覽器 HTML 樹狀結構建構器。嚴重毀損的標記、不常見的未加引號屬性,或缺少原始文字結束標籤,都可能讓有限範圍的掃描產生不同的結果。介面上已說明這項限制;對於法律、安全或遷移方面的稽核,值得將擷取工具的輸出與瀏覽器的 DOM 匯出檔以及真實的爬蟲相互比對,而不是只依賴單一管道。

三個步驟擷取指向 PDF 的連結

  1. 開啟連結擷取工具,將您有權限的 HTML 原始碼貼到輸入欄位,並且(如果頁面使用相對路徑)把絕對頁面網址填入選填的基礎欄位。基礎網址必須使用 HTTP 或 HTTPS,且不能包含認證資訊;這能避免產生誤導性的解析環境,並防止使用者資訊被複製到每個解析結果中。
  2. 執行擷取。工具會每行回傳一個網址,並附上三個計數:保留的唯一目標、標準化過程中移除的重複項目,以及被略過的項目(空值、同文件片段、可執行的協定、無效的網址)。
  3. 將結果複製到您有權限的爬蟲或稽核作業中。用專門的工具來驗證狀態、重新導向和 rel 意義。這份清單本身是個清點結果,而不是健檢報告。

一個實際範例可以說明基礎網址究竟改變了什麼。如果原始碼包含 <a href="/downloads/report.pdf">,而基礎欄位填入 https://example.com/products/page,擷取工具會把路徑解析為 https://example.com/downloads/report.pdf。如果沒有基礎網址,輸出會保持相對形式,這樣工具才不會憑空捏造一個主機。同樣的邏輯也適用於像 ../files/briefing.pdf 這樣的上層目錄相對值,它會根據基礎網址的目錄進行解析,而不是根據文件根目錄。

什麼算是 PDF 連結,什麼會被略過

擷取工具會根據透明的規則來決定每個候選項目要回傳或略過,被略過的數量會告訴您有多少項目被過濾掉。下方表格將您在頁面原始碼中會看到的常見 PDF 情境,對應到您可以預期的行為。

原始碼中的情境擷取工具回傳的內容原因
<a href="/whitepaper.pdf">,基礎網址為 https://example.com/https://example.com/whitepaper.pdf以根目錄為基準的相對路徑透過基礎網址解析
<a href="https://cdn.example.com/report.pdf">https://cdn.example.com/report.pdf絕對網址直接通過
<a href="../files/briefing.pdf"> 含基礎網址根據基礎網址目錄解析為絕對網址上層目錄相對路徑由瀏覽器 URL 模型處理
<a href="javascript:openPdf('x')">略過(會計入)過濾可執行的協定
<a href=""> 空白目標略過(會計入)空白的 href 會被移除
<a href="#download"> 同頁片段略過(會計入)不是 PDF 目的地
在 head 中的 <link rel="alternate" href="/guide.pdf">包含link 元素與錨點一起被掃描
兩個相同的絕對 PDF href一個項目標準化後進行去重
<a href="mailto:[email protected]?subject=PDF">保留為 mailto:...合法的非網頁目的地

如果您的輸出看起來比頁面包含的連結還要少,被略過的數量就是第一個要查看的地方。略過數量偏高不是 bug;它是過濾決策的紀錄,因此一份看起來很短的名單並不會隱藏這項資訊。

擷取之後:驗證 PDF 目標

擷取工具回傳的清單是一份清點結果。清單上的 PDF 可能會重新導向、回傳錯誤、需要驗證、被 robots 規則封鎖,或是刻意指向外部網站。擷取工具不會區分內部與外部連結、不會測試 HTTP 狀態、不會評估 rel 屬性,也不會判斷 SEO 品質。這些問題都是下游的工作。

若要進行完整的稽核,請把這份清單與您自行控管的爬蟲搭配使用。更廣泛的頁面層級 URL 稽核會用相同的模式但更大的範圍來進行——貼上原始碼、檢視計數、複製清單——相關內容已涵蓋於 從頁面原始碼擷取所有網址以進行 SEO 稽核 的工作流程中。至於 PDF 專屬的驗證,請確認每個目標仍然可以解析、回傳 200 狀態,並提供 application/pdf 內容類型。注意重新導向鏈:一個指向 https://example.com/old-report.pdf 的連結,可能會透過 301 重新導向到新的路徑,而擷取工具列出的是原始的 href,而不是最終的目的地。

如果頁面宣告了一個帶有 rel="canonical" 的 link 元素,指向 PDF 網址本身,這就是一個訊號,表示該 PDF 是標準資源,而不是 HTML 頁面。請把 rel 屬性當作證據,而不是定論。擷取工具刻意不會推論目標屬於導航、canonical、preload、stylesheet 或其他關係。

當 PDF 目標從輸出中遺漏時

有幾種反覆出現的模式會讓 PDF 目標從擷取清單中消失,辨識出這些模式可以省下第二輪的工夫。

由 JavaScript 動態插入的 PDF 按鈕是最常見的原因。擷取工具讀取的是靜態原始碼。如果送到瀏覽器的 HTML 包含 <button id="download">,而腳本在點擊時才掛上 PDF 網址,原始碼中就不會包含該 href。請在真實的瀏覽器中開啟頁面、觸發腳本,然後匯出渲染後的 DOM 來找出這些連結。

透過 iframe、object 或 embed 元素嵌入的 PDF 使用的是 src 屬性,而不是 href。擷取工具只掃描錨點、area 和 link 上的 href 值。一個 src 為 /viewer.pdf 的 iframe 不會出現在輸出中。這是刻意的範圍選擇,因為這個工具的任務是針對連結目標的原始碼清點,而不是媒體探索。請查看父元素或外層的錨點包裝,找出真正的下載連結。

同文件片段會依照設計被移除。如果 PDF 是以 <a href="#appendix"> 的形式連結,目標是同一頁上的某個章節錨點,而不是可下載的檔案。擷取工具維持「片段不代表外部資源」的規則。

嚴重毀損的標記會改變結果。未加引號的屬性、缺少的原始文字結束標籤,或不常見的巢狀結構,都可能影響有限範圍掃描讀取文件的方式。當有疑慮時,在高風險的決策上,請與瀏覽器的 DOM 匯出檔或真實的爬蟲相互比對。

延伸閱讀:HTML 中繼標籤產生器:建立乾淨的基本區塊。