2011-09-20 55 views
1

我已經做過網絡抓取,但它從來沒有這麼複雜。我想從學校網站上獲取課程信息。然而,所有的課程信息都顯示在網絡刮板的噩夢中。如何抓取網站內容(* COMPLEX * iframe,javascript提交)

首先,當你點擊「Schedule of Classes」網址時,它會首先引導你瀏覽其他幾個頁面(我相信設置cookie和檢查其他廢話)。

然後,它終於加載了一個頁面,該頁面顯然只在從機構的網頁(如arizona.edu)加載時才喜歡加載。

從那裏表單提交必須通過實際上沒有重新加載頁面的按鈕,但只提交一個AJAX查詢,我認爲它只是操縱iframe。

這個查詢對我來說很難複製。我一直使用PHP和curl模擬瀏覽器訪問初始頁面,收集適當的cookie等。但我認爲我的curl函數發送的頭文件有問題,因爲它在初始「搜索表單」加載後從不讓我執行任何類型的查詢。

任何幫助將是真棒......

http://www.arizona.edu/students/registering-classes - >

或者只是在這裏 「課程表」: http://schedule.arizona.edu/

+0

網站刮氣味。如果他們沒有API來提供他們的數據,他們不想被刮掉 –

+0

@ Col.Shrapnel那麼我需要這些數據。我懷疑他們設置這個系統以避免被刮傷。這是他們實施管理整個學術界的一個更大系統的一部分。顧問們使用這個系統來批准學生上課等,我不是在試圖阻止顧問刮蹭。這是他們選擇使用的預製系統,這是我見過的最笨重的東西。 我計劃開發一個應用程序來幫助學生,如果應用程序有任何動力,我會直接接近學校,並說嘿...給我API,所以我可以輕鬆地做到這一點。 – Rawr

回答

3

如果您需要刮網站重JS/AJAX的使用 - 你需要的東西比PHP更強大;)

首先 - 它必須是完整的瀏覽器有能力執行JS,二 - 必須有一些API用於自動瀏覽。

假設你是一個孩子(還有誰需要解析一所學校) - 試試Firefox iMacros。如果你是經驗豐富的老將 - 看看Selenium。

+0

呃所以現在我實際上不得不把家用電腦專用於這項操作?除非我真的得到一個專用服務器,否則我希望有一些解決方案可以作爲網站cron工作的一部分輕鬆實現。 – Rawr

+0

你可以在服務器上運行firefox/iceweasel。在本演示中檢查第70-72頁。 http://www.defcon.org/images/defcon-17/dc-17-presentations/defcon-17-michael_shrenk-screen_scraper_tricks.pdf – c69

+0

這是很有幫助的先生,即使我懷疑我可能需要一個專用的服務器或一個用於安裝iMacros的虛擬服務器。這一切都非常有幫助,因爲這可能必須是我最終走向的方式。毆打某人發佈網址到一些像夢一樣工作的PHP代碼,這正是我所期待的。 – Rawr

0

你肯定你被允許刮網站?

如果是,那麼他們可以給你一個簡單的REST API?

在極少數情況下,當他們允許您訪問數據但不提供API時,我的建議是安裝一些軟件來記錄您與網站的HTTP交互,可能是wireshark或某些HTTP代理,但記錄所有http請求的詳細信息非常重要。完成之後,對其進行分析,然後嘗試將其重放到最新的位置。

在可能的雜事中,可能在某些時間點,服務器向您發送生成的JavaScript,需要由客戶端瀏覽器執行以便進入下一步。在這種情況下,您需要計算如何解析收到的JavaScript,並找出如何移動。

一個好主意並不是在爆發模式下激發所有的http請求,而是放置一些隨機延遲,以便服務器看起來更像「人」。

但最後你需要弄清楚這是否值得這麼麻煩?由於幾乎任何刮板的路段都可以解決,但它可能會相當耗費時間。

+0

有一個顯示課程狀態的UofA Android應用程序。也許我會從那裏開始。它在收集信息時有一些API函數。再一次,我非常懷疑他們的系統的目的是避免被刮傷。不過,我懷疑他們會實施一些功能來滿足我的需求。我可能可以訪問UofA應用程序使用的信息。你知道任何可以跟蹤Android應用程序的網頁查詢的Windows應用程序嗎? – Rawr

+0

嗯,請嘗試下載android sdk和模擬器,並運行它下面的應用程序。由於模擬器充當http代理,因此很可能它也提供日誌記錄。 –

3

我過去用很多與JS,iframes和各種東西的頁面。我用PhantomJS作爲無頭瀏覽器,後來我用PhantomCurl包裝。該包裝是一個python腳本,可以從命令行運行或作爲模塊導入