如何在Ruby中编写Web scraper?

我想抓取一个没有API的流行网站(比如Quora)并获取一些特定信息并将其转储到文件中 – 比如csv,.txt或.html很好地格式化:)

例如,仅返回Quora用户的所有“Bios”列表,这些用户在其公开信息中列出了职业“用户体验设计师”。

我如何在Ruby中做到这一点?

我对Ruby&Rails的工作方式有足够的了解。 我刚刚完成了一个Rails应用程序 – 主要是我自己编写的。 但是,无论想象力如何,我都不是大师。

我了解RegExs等

你最好的选择是使用Mechanize。它可以跟随链接,提交表单,你需要的任何东西,web客户端。 顺便说一句,不要使用正则表达式来解析HTML。 使用HTML解析器。

如果你想要更高级别的东西,试试wombat ,这是我在Mechanize和Nokogiri之上建造的这个gem。 它能够使用非常简单和高级别的DSL解析页面并关注链接。

我知道答案已被接受,但Hpricot在解析HTML方面也很受欢迎。

您所要做的就是查看页面的html源代码并尝试查找与所需元素匹配的XPath或CSS表达式,然后使用以下内容:

doc.search("//p[@class='posted']") 

机械化非常棒。 如果你想学习一些新东西,你可以看看Scrubyt: https : //github.com/scrubber/scrubyt 。 它看起来像Mechanize + Hpricot。 我从来没用过它,但看起来很有趣。

Nokogiri很棒,但我觉得输出很麻烦。 我写了一个ruby gem来轻松地创建HTML类: https : //github.com/jassa/hyper_api

HyperAPI gem使用Nokogiri通过CSS选择器解析HTML。

例如

 Post = HyperAPI.new_class do string title: 'div#title' string body: 'div#body' string author: '#details .author' integer comments_count: '#extra .comment' do size end end # => Post post = Post.new(html_string) # => #