红宝石屏幕抓取脚本中的问题

时间:2010-10-18 05:56:56

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

我有一个小的爬虫/屏幕抓取脚本,它曾经在半年前工作过,但现在,它不再起作用了。我在页面源代码中检查了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

2 个答案:

答案 0 :(得分:0)

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

这是一个很好的例子,说明为什么你不应该使用Regex来抓取页面以匹配内容。尝试使用像Nokogiri这样的DOM解析器重新编写脚本。这不一定会阻止您的脚本中断,但至少会让它在较小的更改中存活下来。

Rubular链接

中可以看到它不起作用的原因

答案 1 :(得分:0)

网页抓取的另一个选择是iMacros。这些脚本非常容易适应站点更改。