2007年4月28日 星期六

用 GreaseMonkey 自動抓網頁

昨天詩芳說她有個需求,要自動去網頁抓資料。

她打算用 Java 寫,我看了一下網頁內容,Java 我不會,那我用 Pyhton 試試看,結果用 urllib2 弄了辦也弄不出來,生氣,換上 wget,結果 server 丟了一個 500 給我,告訴我這樣是行不通的,我沒辦法啦。就在這個時候建勳剛好用 MSN 找我吃晚餐,我記得前幾天以前在 PTT 的 Python 版上看到他在跟別人討論抓網頁的東西,我想他應該有經驗可以指教,就詢問他這個問題,結果得到了很不錯的答案。

前置動作:
  1. 請使用 firefox 瀏覽器
  2. 請學會簡單的 JavaScript
    不過我本來是不會,一邊用一邊學,一個晚上就好了。
  3. 請裝上 GreaseMonkey 插件
    GreaseMonkey 可以在載入指定網頁的時候,執行自訂的 JavaScript,使用者可以透過 DOM 變更網頁內容,操作瀏覽器執行特定動作,像是跳到指定的網址,然後跳回來等等的動作。這邊有 GreaseMonkey 的使用教學(Dive into GreaseMonkey)必看
  4. 請裝上 Auto Save 插件
    Auto Save 會在 firefox 瀏覽到指定頁面的時候,自動將該往頁儲存起來。所以你只要把你想要儲存的頁面用一些像是 prefix 的規則寫好,那你配合 GreaseMonkey 自動切頁過去的時候,Auto Save 就會剛好自動把你的網頁給存起來。
  5. 請裝上 DOM Inspector 插件
    firefox 選單「工具」拉下來應該就可以看到,如果你沒看到,那表示你沒裝,firefox 從 2003 年 11 月之後,他就被內建到安裝程式裡面的,安裝 firefox 的時候,選擇自訂選項安裝,把 DOM Inspector 打勾,然後完成你的安裝就可以了。這個東西等等可以幫助你用來解析你的目標網頁,讓你可以知道要怎麼透過 JavaScript 操作你的網頁。
  6. 請裝上 Inspect Context 插件
    因為只有 DOM Inspector 並不是很容易定位你要的資料位置,配合 Inspect Context,你可以在網頁的任何一個地方按右鍵,選擇「Inspect」,這個時候 DOM Inspector 就會開啟,並且自動展開到你所點選的位置。
  7. 請到 Web Development Bookmarklets,把第一個 shell 拖曳到書籤工具列上。
    這個 shell 可厲害了,點他一下,他會跳出一個 JavaScript shell 視窗,你可以即時的在這邊進行操作,而不用每次都寫一個完整的 JavaScript 檔案掛到 GreaseMonkey 上面去測試,是開發期的良好工具,請善用。
大致流程:
  1. 針對要抓取的頁面,一邊使用 Inpect Context / DOM Inspector 這兩樣東西分析你的目標網頁,一邊使用 Java Script Shell 進行開發跟測試你的 JavaScript。
  2. JavaScript 寫好以後,把寫好 JavaScript 掛上 GreaseMonkey。
  3. 打開 Auto Save 設定好網址,然後 enable。
  4. 開始瀏覽,自動抓取,完工 :)
當然這個是很粗略的介紹,不過我想重要的都沒有漏掉。

3 則留言:

  1. 您好:
    是否可將原始碼借給我參考,因為小弟正也碰到此問題,謝謝!

    回覆刪除
  2. 沒用過 GreaseMonkey
    您能給我原始碼參考嗎?

    回覆刪除
  3. 你好 可以借我參考一下原始碼嗎

    謝謝你 !!

    回覆刪除