如何使用Ruby来抓取,构建会话以及在目标站点上启动页面

时间:2010-01-05 17:09:40

标签: ruby screen-scraping

我想知道如何使用Ruby来抓取一个网站,目的是启动一个加载了目标页面的新浏览器。这是必需的,因为目标页面不是无状态的,并且需要许多会话参数。

有关示例流程,请参阅Kayak.com如何执行此操作。 1.前往Kayak.com,在芝加哥搜索一家酒店,于2010年1月21日办理登机手续,并于2010年1月22日退房。 2.选择第一个结果,然后选择orbitz 3.皮划艇带您到orbitz的预订页面。要做到这一点,它必须建立一个会话,因为orbitz没有永久链接到他们的预订页面。

有关如何使用Ruby执行此操作的任何想法?

4 个答案:

答案 0 :(得分:6)

看看这个图书馆http://mechanize.rubyforge.org/

答案 1 :(得分:2)

我知道这已经过时了,但请查看ruby库Watir。它操纵浏览器并使用javascript

答案 2 :(得分:1)

您可能需要查看Mechanize,这是一个用于抓取的ruby gem,就像浏览器一样,可以保存会话,在这里您可以找到一个好的screencast

答案 3 :(得分:1)

抓取网页的艺术是识别页面中的哪些参数用于创建给定的响应,在原始页面源中找到它们,然后用这些参数的每个可用组合进行刮擦。您可能不希望会话变量这样,因为大多数网站会在一定时间后丢弃旧会话,但您希望能够创建将重定向到相关结果页面的搜索字符串或只是一个直接的URL有问题的结果页面。

我希望您需要为每个要从中抓取数据的不同站点进行某种配置,因为它们在设计和参数名称方面都会有所不同。有些人可能会提供合作伙伴网络服务,以使您的工作更轻松,如果可能的话,值得使用,因为它可能更可靠,更不容易受到网站设计变更的影响。

即使使用像上面提到的Mechanize这样的工具,也需要相当多的有点脏的手动配置来使一切工作正常,因为你正在使用的很多网站不太可能拥有最好的HTML和设计,并且有很有可能需要在这个地方搜寻javascript或ajax链接。