ノコギリ初心者で、バイドゥの検索結果をスクレイピングしようとしています。テストする簡単なスクリプトを作成します。検索キーワードの最初のページを読み取り、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
が、これは違いを見つけたときにしか考えられなかったものです.
何故ですか?