-1

我想抓取一个网站,对于术语(“猫”、“狗”、“斑马”),我该怎么做?我希望它的结果是给定字符串的所有实例,甚至可能是一个计数。我只能通过标签找到方法,而不是在标签内部。我应该使用什么程序或 gem?

4

4 回答 4

1

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

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

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

我已经使用它实现了一个简单的屏幕抓取,并且效果很好。

于 2012-08-21T18:17:13.370 回答
0

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

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

于 2012-08-21T18:00:58.300 回答
0

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

请参阅链接中的示例。

于 2012-08-21T18:10:45.723 回答
0

假设这是我们的文档:

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

content

"dogscatszebrabarzebrasfoo"

Usingscan给了我们一个字符串出现的数组:

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 太不规则了,无法使用模式进行扫描,误报的机会也太高了。坚持使用解析器,使用它来提取内容,然后对其进行处理。

于 2012-08-21T21:03:32.177 回答