我想抓取一个没有API的热门网站(比如Quora)并获取一些特定信息并将其转储到文件中 - 比如csv,.txt或.html很好地格式化:)< / p>
E.g。仅返回Quora用户的所有“Bios”列表,这些用户在其公开信息中列出了职业“用户体验设计师”。
我如何在Ruby中做到这一点?
我对Ruby&amp; Rails工作。我刚刚完成了一个Rails应用程序 - 主要是我自己编写的。但是,无论想象力如何,我都不是大师。
我理解RegExs等。
答案 0 :(得分:21)
您最好的选择是使用Mechanize。它可以跟随链接,提交表单,您需要的任何内容,Web客户端。顺便说一句,不要使用正则表达式来解析HTML。使用HTML解析器。
答案 1 :(得分:7)
如果你想要更高级别的东西,试试wombat,这是我在Mechanize和Nokogiri之上建立的宝石。它能够使用非常简单和高级别的DSL解析页面并关注链接。
答案 2 :(得分:6)
我知道答案已被接受,但Hpricot在解析HTML方面也很受欢迎。
您所要做的就是查看页面的html源代码并尝试查找与所需元素匹配的XPath或CSS表达式,然后使用类似的内容:
doc.search("//p[@class='posted']")
答案 3 :(得分:2)
机械化非常棒。如果你想学习新的东西,你可以看看Scrubyt:https://github.com/scrubber/scrubyt。它看起来像Mechanize + Hpricot。我从未使用它,但它看起来很有趣。
答案 4 :(得分:1)
Nokogiri很棒,但我觉得输出很麻烦。我写了一个ruby gem来轻松地创建HTML类:https://github.com/jassa/hyper_api
HyperAPI gem使用Nokogiri通过CSS选择器解析HTML。
E.g。
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)
# => #<Post title: 'Hi there!', body: 'This blog post will talk about...', author: 'Bob', comments_count: 74>