如何刮掉特定的字符串

时间:2012-08-21 17:55:04

标签: html css ruby-on-rails ruby rubygems

我想抓一个网站,关于条款(“猫”,“狗”,“斑马”), 我该怎么做呢?我希望结果是给定字符串的所有实例,&也许甚至是一个计数。我只能通过标签找到方法,但不能在标签内部找到。 我应该使用什么程序或宝石?

4 个答案:

答案 0 :(得分:1)

如果您使用Ruby,Nokogiri / Mechanize应该是您应该使用的工具。使用这些工具,网站抓取非常简单。

您也可以使用javascript执行此操作,我觉得这是最简单的方法。

查看此链接 - http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs/

我使用它实现了一个简单的屏幕抓取,它运行得很好。

答案 1 :(得分:0)

听起来你需要正则表达式。编写正则表达式以匹配给定的字符串。希望这会让你开始

http://www.ruby-doc.org/core-1.9.3/Regexp.html

答案 2 :(得分:0)

我觉得易于使用的PHP库是http://simplehtmldom.sourceforge.net/

请参阅链接中的示例。

答案 3 :(得分:0)

假设这是我们的文件:

doc = Nokogiri::HTML('<p>dogs</p><p>cats</p><p>zebra</p><p>bar</p><p>zebras</p><p>foo</p>')

content是:

"dogscatszebrabarzebrasfoo"

使用scan为我们提供了一个字符串出现的数组:

doc.content.scan('dogs')
[  
    [0] "dogs"
]

结合所有这些:

doc = Nokogiri::HTML('<p>dogs</p><p>cats</p><p>zebra</p><p>bar</p><p>zebras</p><p>foo</p>')
%w[dogs cats zebra].each do |a|
  puts '%d %s' % [doc.content.scan(a).count, a]
end

将输出:

1 dogs
1 cats
2 zebra

虽然这个示例看起来很容易使用正则表达式对原始HTML解析结果,但这条路径会导致疯狂。 HTML太不规则而无法使用模式进行扫描,误报的机会太高。坚持使用解析器,使用它来提取内容,然后对此进行处理。