我有一个小的爬虫/屏幕抓取脚本,它曾经在半年前工作过,但现在,它不再起作用了。我在页面源代码中检查了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
答案 0 :(得分:0)
目标网站似乎已更改其网页结构,因此您的正则表达式不再匹配。
这是一个很好的例子,说明为什么你不应该使用Regex来抓取页面以匹配内容。尝试使用像Nokogiri这样的DOM解析器重新编写脚本。这不一定会阻止您的脚本中断,但至少会让它在较小的更改中存活下来。
在Rubular链接
中可以看到它不起作用的原因答案 1 :(得分:0)
网页抓取的另一个选择是iMacros。这些脚本非常容易适应站点更改。