【问题标题】:problems in a ruby screen-scraping scriptruby 屏幕抓取脚本中的问题
【发布时间】:2010-10-18 05:56:56
【问题描述】:

我有一个小型爬虫/屏幕抓取脚本,半年前可以工作,但现在,它不再工作了。我检查了页面源中reg表达式的html和css值,但它们仍然相同,所以从这个角度来看,它应该可以工作。有什么猜测吗?

require "open-uri"

# output file
f = open 'results.csv', 'w+'

# output string
results = ""

begin

  # crawl first 20 pages
  for i in (1..20)
    open("http://www.example-#{i}.com") {|url|

      # check each line using regular expression
      url.each_line { |line|
        if line =~ /class=\"L1g\" onclick=\"s_objectID=\'foobar\'\">([^<]+)<\/a><\/h3><\/li>/
          # if regular expression matches then add to results
          results += $1 + "\n"
        end
      }
    }
  end
ensure
  # write to and close file
  f.print results
  f.close
end

【问题讨论】:

  • 你说它不起作用的地方,会发生什么?
  • +1 用于破坏 Stack Overflow 的语法高亮。它会产生什么异常消息?另外,您是否尝试过How do I debug ruby scripts? 中提到的任何调试方法
  • 所以页面和往常一样,过去一直有效。你升级 Ruby 了吗?
  • 您是否尝试将其关闭再打开?
  • 大家好,感谢 cmets 并为迟到的答复感到抱歉。该脚本成功运行,但会生成一个空的 csv 文件。我还没有尝试调试。由于它没有产生任何错误消息,我想我可以跳过它。我访问了该网站并交叉检查了相关的 url,但它仍然是一样的。 @Lars您将其关闭和打开是什么意思?顺便说一句:是否有打破语法高亮的徽章? ;)

标签: ruby screen-scraping web-crawler web-scraping


【解决方案1】:

目标网站似乎已更改其页面结构,因此您的正则表达式不再匹配。

这是一个很好的例子,说明了为什么您不应该使用正则表达式来抓取页面以匹配内容。尝试使用像 Nokogiri 这样的 DOM 解析器重新编写脚本。这不一定会阻止您的脚本被破坏,但至少可以让它在微小的变化中幸存下来。

它不工作的原因可以在这个Rubular链接中看到

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 2011-02-20
相关资源
最近更新 更多