2011-05-25 100 views
3

我一直在試圖抓取並最終從hostels.com解析一些數據(特別是可用性和價格),例如http://www.hostels.com/hosteldetails.php/HostelNumber.11890。問題是,一旦你選擇了夜晚的數量並選擇「現在預訂」,沒有任何東西通過URL字符串傳遞(它全部通過Ajax完成,我相信),我不能直接進入特定的日期或時間範圍。屏幕抓取/解析幫助

我試圖瀏覽器仿真器,如硒,IRobotSoft和FakeApp,雖然我沒有得到硒和假做太多的工作獲取完整的源代碼的,這是醜陋的,仍然有刮(與其他解析時繁瑣軟件)每天多個頁面。

我也試過HTML DOM解析器,PHP腳本Web瀏覽器,HTMLUnit,cScrape.php,Crowbar。要麼他們無法處理Ajax,要麼我沒有運氣讓他們跑步。

理想情況下,我希望能夠從服務器運行一些儘可能少的依賴關係,但此時我只想讓它運行。

現在花了很多小時試圖讓這個工作。我仍然覺得我不確定從哪裏開始。有人能指出我正確的方向嗎?我應該回去並花更多時間用HTMLUnit嗎?對於像這樣的網站,最佳做法是什麼?

感謝

回答

2

我真的爲Node.js ATM(服務器端JavaScript,如果你不熟悉),所以這就是我推薦。使用它來抓取網站的真棒是你可以使用jQuery或任何你最喜歡的JS框架來做你想要的信息解析的所有工作!請參閱以下資源開始:

http://blog.dtrejo.com/scraping-made-easy-with-jquery-and-selectorga

https://github.com/tmpvar/jsdom

https://github.com/chriso/node.io/wiki/Scraping

https://github.com/joshfire/node-crawler

+0

哇,jQuery是偉大的IL給這一個鏡頭,謝謝。 – Alex 2011-05-28 16:59:01

1

我發現迅捷(http://celerity.rubyforge.org),一在底層使用HTMLUnit的JRuby庫將成爲「通過Web進行數據採集」的強大解決方案。

我發現,作爲Ruby的Celerity比完全成熟的Java(HTMLUnit)開發要快得多。另外,由於Celerity對HTMLUnit的「包裝」 - 我可以下降到HTMLUnit,因爲我需要做更重的提升。

我已經成功地使用了DHTML豐富的網站,並且使用了Ajax;雖然我使用了一些sleep()調用來等待Ajax響應,但一切都按預期工作。

試試看!

2

您所指的頁面似乎並未使用AJAX。相反,你所說的AJAX是一個POST請求(而不是URL中傳遞的東西,這是一個GET請求)。我建議你閱讀它們之間的區別。試着去了解發生了什麼,它比依靠某些第三方工具更重要,因爲它可能會變得非常不靈活。

安裝Firebug並查看哪些變量在POST請求中發送。 現在用你最喜歡的編程語言做同樣的事情。解析POST請求的響應HTML以獲取必要的信息。

此外,+1努力嘗試這麼多不同的解決方案,而不是放棄。

+0

感謝您的幫助,這使現在更有意義。 – Alex 2011-05-28 16:59:13

2

我試圖瀏覽器仿真器,如硒,IRobotSoft和FakeApp .. 我也試過HTML DOM解析器,PHP編寫腳本的Web瀏覽器,的HtmlUnit,cScrape.php,撬棍。

你試過iMacros了嗎? http://wiki.imacros.net/Data_Extraction

我們對基本網站使用HTMLUnit,iMacros使用複雜和ajaxy。

下面是腳本的作品:

URL GOTO=http://www.hostels.com/hostels/ottawa/ottawa-backpackers-inn/11890 
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:theForm ATTR=ID:ArrivingField CONTENT=15<SP>Jun<SP>2011 
TAG POS=1 TYPE=DIV FORM=NAME:theForm ATTR=CLASS:calIcon 
TAG POS=1 TYPE=SELECT FORM=NAME:theForm ATTR=NAME:NumNights CONTENT=%3 
TAG POS=1 TYPE=SELECT FORM=NAME:theForm ATTR=NAME:NumNights CONTENT=%4 
TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:theForm ATTR=VALUE:Book<SP>Now