在資訊架構的第一步,我們需要先把所有內容找出來。這裡以「從網站抓取全部頁面」為例,說明如何利用工具或腳本,把整個網站的每一個可訪問頁面收集起來,以便後續進行內容盤點與分類。
透過自動化抓取,我們可以節省大量手工搜尋時間,也能確保不漏掉任何隱藏在深層結構中的頁面。接下來,本文將以實際範例說明常用的抓取流程、工具選擇與注意事項。
1️⃣ 前期準備
- 檢查 robots.txt:先確認網站允許爬蟲存取,避免違規。
- 選擇工具:Python 與
requests+BeautifulSoup或完整框架 Scrapy;也可以用命令列工具如wget、curl進行簡易抓取。
2️⃣ 用 Python 撰寫簡易爬蟲
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse
import json
def crawl(start_url):
visited = set()
to_visit = [start_url]
all_urls = []
while to_visit:
url = to_visit.pop(0)
if url in visited:
continue
try:
resp = requests.get(url, timeout=5)
if resp.status_code != 200:
continue
except Exception as e:
print(f"抓取失敗: {url} - {e}")
continue
visited.add(url)
all_urls.append(url)
soup = BeautifulSoup(resp.text, 'html.parser')
for link in soup.find_all('a', href=True):
href = link['href']
# 轉成絕對路徑
full_url = urljoin(url, href)
if urlparse(full_url).netloc != urlparse(start_url).netloc:
continue
if full_url not in visited:
to_visit.append(full_url)
return all_urls
if name == "main":
start = "https://example.com/"
urls = crawl(start)
with open('all_pages.json', 'w', encoding='utf-8') as f:
json.dump(urls, f, ensure_ascii=False, indent=2)
- 說明:程式會從起始網址開始,遞迴抓取同一網域內的所有連結,並將結果寫成 JSON 檔。
3️⃣ 使用 Scrapy 快速上手
- 建立專案:
scrapy startproject page_crawler cd page_crawler scrapy genspider example example.com - 編輯
example.py:import json from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractor class ExampleSpider(CrawlSpider): name = "example" allowed_domains = ["example.com"] start_urls = ["https://example.com/"] rules = [Rule(LinkExtractor(), callback="parse_item", follow=True)] def parse_item(self, response): # 這裡不做任何資料抽取,只記錄 URL yield {"url": response.url} - 執行並輸出:
scrapy crawl example -o all_pages.json
- 優點:Scrapy 內建節流、重試與排程功能,適合大型網站抓取。
4️⃣ 命令列工具:wget 與 curl
- wget(一次性抓取整站):
wget --recursive --level=inf --no-clobber --page-requisites --convert-links https://example.com/ -O - | head - curl + grep:快速列出所有連結,後續可配合腳本處理。
curl -s https://example.com/ | grep -oP '(?<=href=")[^"]*' > links.txt
5️⃣ 注意事項
- 速率限制:不要一次性發送過多請求,設定
time.sleep()或 Scrapy 的 DOWNLOAD_DELAY。 - robots.txt:尊重網站規範,避免爬取被禁止的區域。
- 動態內容:若頁面使用 JavaScript 產生連結,需要用 Selenium、Playwright 等工具。
- 存檔格式:JSON 為最常見且易於後續處理;亦可考慮 CSV 或 SQLite 以便快速查詢。
6️⃣ 後續步驟
- 把抓取到的 URL 列表輸入到內容盤點工具,進行分類與標籤設定。<br>2. 針對重複或不必要的頁面做過濾。
- 建立「內容地圖」視覺化呈現網站結構。
透過上述方法,你即可完整取得網站所有可訪問的頁面,為後續資訊架構設計奠定堅實基礎。
