2011-05-25 64 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