3

我一直在尝试从 hostels.com 抓取并最终解析一些数据(特别是可用性和价格),例如http://www.hostels.com/hosteldetails.php/HostelNumber.11890。问题是,一旦您选择了住宿天数并选择“立即预订”,则不会通过 URL 字符串传递任何内容(我相信这一切都是通过 Ajax 完成的),我无法直接转到特定的日期或时间范围。

我尝试过浏览器模拟器,例如 Selenium、IRobotSoft 和 FakeApp,虽然我确实让 Selenium 和 Fake 完成了大部分捕获完整源代码的工作,但在不得不抓取(并使用其他软件解析)多个页面时,它很丑陋并且仍然很乏味一天。

我还尝试过 HTML DOM Parser、PHP Scriptable Web Browser、HTMLUnit、cScrape.php、Crowbar。要么他们无法处理 Ajax,要么我连让他们跑起来都没有运气。

理想情况下,我想要可以从服务器运行的东西,尽可能少的依赖项,但在这一点上,我只想让它运行。

现在花了很多时间试图让这个工作。我仍然觉得我不确定从哪里开始。有人可以指出我正确的方向吗?我应该回去花更多时间在 HTMLUnit 上吗?像这样的网站的最佳做法是什么?

谢谢

4

3 回答 3

2

您所指的页面似乎没有使用 AJAX。相反,您所说的 AJAX 是一个 POST 请求(与在 url 中传递的东西相反,它是一个 GET 请求)。我建议您阅读它们之间的区别。尝试了解发生了什么,这比依赖某些可能会变得非常不灵活的第三方工具更重要。

安装 Firebug 并观察 POST 请求中发送了哪些变量。现在用你最喜欢的编程语言做同样的事情。解析 POST 请求的响应 HTML 以获取必要的信息。

此外,+1 表示尝试了这么多不同的解决方案并且不放弃。

于 2011-05-25T23:59:47.520 回答
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

于 2011-05-25T23:51:40.243 回答
1

我发现 Celerity (http://celerity.rubyforge.org),一个在底层使用 HTMLUnit 的 JRuby 库,对于“通过 Web 获取数据”来说是一个非常强大的解决方案。

我发现,与成熟的 Java (HTMLUnit) 相比,Celerity 是 Ruby 的开发速度要快得多。此外,由于 Celerity 对 HTMLUnit 的“包装”——我能够降到 HTMLUnit,因为我需要做一些更重的提升。

我在丰富的 DHTML 以及利用 Ajax 的网站上取得了成功;虽然我使用了一些 sleep() 调用来等待 Ajax 响应 - 一切都按预期工作。

试试看!

于 2011-05-25T23:52:06.553 回答