我是 Nokogiri 的新手,我正在尝试抓取百度的搜索结果。我写了一个简单的脚本来测试。它读取搜索关键字的第一页stackoverflow
并输出文档的长度和第一页上的结果链接数(应该是10),它运行得非常正确。
# coding: utf-8
require 'rubygems'
require 'nokogiri'
require 'open-uri'
url = 'http://www.baidu.com/s?wd=stackoverflow&pn=0'
parsed_uri = URI.parse(URI.escape(url))
read_uri = parsed_uri.read
puts "URI read length: #{read_uri.to_s.length}"
doc = Nokogiri::HTML(read_uri)
puts "Nokogiri document length: #{doc.to_s.length}"
puts "result link count: #{doc.css('h3.t a').count}"
结果输出:
$ ruby scrap_baidu.rb
URI read length: 37659
Nokogiri document length: 38226
result link count: 10
但是当我将它移动到一个新的 rails 3 应用程序的 rake 任务时:
require 'nokogiri'
require 'open-uri'
namespace :batch do
desc "test"
task :test_fetch => :environment do
url = 'http://www.baidu.com/s?wd=stackoverflow&pn=0'
parsed_uri = URI.parse(URI.escape(url))
read_uri = parsed_uri.read
puts "URI read length: #{read_uri.to_s.length}"
doc = Nokogiri::HTML(read_uri)
puts "Nokogiri document length: #{doc.to_s.length}"
puts "result link count: #{doc.css('h3.t a').count}"
end
end
我得到了完全不同的结果:
$ bundle exec rake batch:test_fetch
URI read length: 37964
Nokogiri document length: 11824
result link count: 0
文档长度完全不正确。好像Nokogiri
表现的不一样。我不太确定.length
是否有一种方法可以看到这一点,但这是我只有在发现差异时才能想到的。
这是为什么?