2008-12-27 73 views
2

我需要捕獲一個網站,並且正在尋找合適的庫或程序來執行此操作。該網站使用Java腳本並推送更新到頁面,我需要捕獲這些以及頁面本身。我使用curl來捕獲頁面本身,但我不知道如何捕獲更新。在給出選擇的地方,我會使用C++。如何以強制更新的方式以編程方式捕獲網頁

問候

回答

2

安裝Firefox和GreaseMonkey東西。 GM腳本在適當的地方添加DOM事件以跟蹤修改。然後,您可以使用XMLHttpRequest將信息發送到服務器,或使用XPCOM將它們寫入本地文件file IO opearation。這樣,你就可以在十幾行內完成你想要的任務,而且幾乎不需要逆向工程,而其他人建議的(屏幕抓取)需要數千行代碼用於JavaScript重站點IMO。

補遺:這是/不是/ C++的工作。無論如何,你應該用C++來完成,最終你會得到JS的逆向工程,所以你最好學習足夠的JS來使用GreaseMonkey。

1

看看SpiderMonkey

我沒有真正使用過它,所以我不確定它是否會做你想做的。我遇到過,它可以與Python編寫的Scrapy網頁抓取和屏幕抓取框架一起使用。

或者,您可以反向設計JavaScript推送更新的執行方式,並直接訪問它們。這聽起來像你需要存儲這些更新和/或將它們應用到基本HTML頁面。

0

問題是您的網頁正在更新,因爲腳本代碼正在頁面上執行。使用捲曲不會得到你那裏的..

不確定你的確切需要..但你可以寫一個JavaScript注入器書籤,添加一個按鈕到任何網頁,並讓你抓住DOM或身體HTML手動只要你想...這是多少剪輯標記應用程序的工作。

如果你需要的東西,因爲他們出現的自動捕獲更新 - 像電影..然後你將需要的東西更多地參與...

2

如果你仍然想使用C++和捲曲揣摩瞭解頁面中的JavaScript是什麼 - 我假設它只是使用定時器發送AJAX請求並更新頁面(儘管它可能更復雜)。 使用工具如Firefox使用Firebug(以下簡稱「網」間諜是你想要的),看看什麼樣的它是一個請求 - 你會得到:

  • 請求的URL
  • 參數
  • 返回的內容(可以是HTML,文本,XML或JSON)

運氣好的話,你將有足夠的模仿在C++的行爲與捲曲。如果你無法從收集的數據中做出任何事情,你必須瀏覽JavaScript並試圖弄清楚它在做什麼(但大多數時候頁面更新非常簡單)。

這樣做的簡單方法是在瀏覽器中執行此操作,例如。作爲一個Firefox插件(用JavaScript編寫) - 如果這是需要超過一個寵物項目,這可能是一個有點「unelegant」其他任何東西,但它應該是很容易做到:

  • 監測DOM樹更新(html DOM級別2有各種「突變」事件,但我從未使用它們,所以我對它們不甚瞭解,或者它們「工作」/受支持 - 請參閱DOM mutation events)。這種東西甚至有可能在greasemonkey中工作,這意味着你不必製作完整的firefox插件 - 例如。 Post-processing a page after it renders應該讓你開始(你不想跟蹤'負載',但像「DOMSubtreeModified」)。如果突變事件不起作用,您可以使用計時器並比較html內容。
  • 或做的螢火蟲不和監視網絡請求並做的結果
1

如果你正在尋找靜態網頁抓取BeautifulSoup(Python)是最好的和最簡單的。

如果您正在尋找一些javascript呈現的代碼或其他東西,那麼在頁面呈現之前無法完成,因此無法單獨使用BeautifulSoup。您將不得不使用像Crowbar - Similie這樣的無頭瀏覽器(使用XULRunner),它可以在無頭瀏覽器上呈現JavaScript內容,並且可以將此呈現內容的輸出用作BeautifulSoup scraper的輸入。