我一直试图从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吗?这样的网站最好的做法是什么?
由于
答案 0 :(得分:2)
我真的进入Node.js atm(服务器端javascript,以防你不熟悉),所以这就是我推荐的内容。使用它来抓取网站真是太棒了你可以使用jQuery或者你喜欢的任何JS框架来完成所有解析你想要的信息的工作!请参阅以下资源以开始使用:
http://blog.dtrejo.com/scraping-made-easy-with-jquery-and-selectorga
https://github.com/tmpvar/jsdom
答案 1 :(得分:2)
您所指的页面似乎没有使用AJAX。相反,你所指的AJAX是一个POST请求(而不是在url中传递的东西,这是一个GET请求)。我建议你仔细阅读它们之间的区别。试着了解发生了什么,这比依赖某些第三方工具更重要,这些工具可能会变得非常不灵活。
安装Firebug并观察POST请求中发送的变量。 现在用你最喜欢的编程语言做同样的事情。解析POST请求的响应HTML以获取必要的信息。
此外,+1努力尝试这么多不同的解决方案,而不是放弃。
答案 2 :(得分:2)
我尝试过浏览器模拟器,例如Selenium,IRobotSoft和FakeApp。 我也尝试过HTML DOM Parser,PHP Scriptable Web Browser,HTMLUnit,cScrape.php,Crowbar。
你尝试过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
答案 3 :(得分:1)
我发现Celerity(http://celerity.rubyforge.org)是一个使用HTMLUnit的JRuby库,是“通过Web获取数据”的一个非常强大的解决方案。
我发现,与完全成熟的Java(HTMLUnit)相比,快速开发的速度要快得多。此外,由于Celerity对HTMLUnit的“包装” - 我可以下载到HTMLUnit,因为我需要做一些更重的提升。我在富含DHTML的网站上取得了成功,并且利用了Ajax;虽然我已经使用了一些sleep()调用来等待Ajax响应 - 一切都按预期工作。
试一试!