【问题标题】:How to scrape specific strings如何抓取特定的字符串
【发布时间】:2012-08-17 02:58:51
【问题描述】:

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

【问题讨论】:

  • 我查看了 nokogiri、mechanize、selectorgadget 教程和视频,并进行了搜索,但只能找到将整个片段置于标签之间的示例。
  • “按标签进行,但不在标签内部”令人困惑。 “标签内”是什么意思?在标签的参数内部还是在标签的子节点中?

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    假设这是我们的文档:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        我觉得好用的 PHP 库是http://simplehtmldom.sourceforge.net/

        请参阅链接中的示例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-23
          • 1970-01-01
          • 2021-10-28
          • 2021-12-11
          • 1970-01-01
          • 1970-01-01
          • 2019-01-07
          相关资源
          最近更新 更多