Cached Page

筆者最近的功課之一是需要撈一個已經下線的網站內容, 所以首先要從網路上的頁面庫存下手 cachedpages; 順帶一提, 撰寫爬蟲撈取資料的人很多, 一種使用 cached page 的方式是因為目標網站會 ban 掉一些 (惡意?) 造成頻寬、系統負擔問題的連續需求發送端, 所以轉而向 cached page 著手。

Github Source

這裡因為 google 的頁面庫存保留時間過短, 所以實作上僅對 https://archive.org/web/ 做查詢, 用來幫助蒐集仍存留在 cached page server 上的網址有哪些, 使用方式如下。(當然更辛苦的是針對這些不同時期 mirror 下來的頁面內容做 parsing T.T)

python CachedPageSeedFinder.py domain <domain> [--output=<ofname>] [--input=<dfname>] [--ignore=<list>]  

Options:

  • -h --help Show this screen.
  • --version Show version.
  • --output=<ofname> Output all links to a file
  • --ignore=<list> Ignore url with filter list. Split input use separator ','. ex. --ignore=key1,key2
  • --history Get whole domain link with all history
  • --debugfile=<dfname> Debug only. Test parse link function use an input file.

實作的內容很簡單, 先是對 cached page server 送出 query 的網址查詢後, 將回傳的內容做解析撈出網址即可, 算是簡易的 crawler, 有興趣可以直接參考 Github Source

使用到的 python module

  • docopt 提供命令列解析的工具
  • requests 用來對 server 發送 request
  • bs4 (BeautifulSoup 4) 用來解析 html 的內容

題外話

  1. 在功能實作上是不需要使用到 docopt, 但無意間看到介紹的相關文章, 也就用來當作練習的一部份。
  2. 後續要進行大量的解析這些不同時期殘留的庫存頁面、以及圖片的抓取, 已經改用 scrapy 的框架來實作, 主要是對於大量需要花時間的 io (Internet 連線) 工作, 單一循序的執行等待過於費時, 透過 scrapy 能同時進行多個非同步的 request 達到改善, 另外在 html 的解析上也改用 lxml (理由是依據 StackOverflow 上 效能的評估)。

Captain Vincent

Read more posts by this author.