0

配列を使用して複数の機械化クエリを実行することは可能ですか? 次のコードから配列を引いたものは、単一のクエリでは正常に機能しますが、複数のクエリでは機能しません。

require 'nokogiri'
require 'mechanize'

agent = Mechanize.new

#User Agent masking
agent.user_agent_alias = 'Windows Mozilla'

#Array of keywords to search
search = Array.new

search << 'TAICHI 21'
search << 'S56CA'

#Take our search array, insert it into a query
agent.get("http://www.asus.com/Search/?SearchKey=#{search}")

#This handles the url
File.open("results.txt","w") do |f|
    PP.pp(page.links.find_all{|l| l.text =~ /#{search}/i},f)
end

2回目の試行

require 'nokogiri'
require 'mechanize'

agent = Mechanize.new

#User Agent masking
agent.user_agent_alias = 'Windows Mozilla'

#Array of keywords to search
search = [ 'S56CA', 'TAICHI 21' ]

#Take our search array, insert it into a query
agent.get("http://www.asus.com/Search/?SearchKey=#{search}")

File.open("results.txt","w") 

#This handles the url
search.each do |f|
    results.txt << PP.pp(page.links.find_all{|l| l.text =~ /#{search}/i},f)
end
4

1 に答える 1

0

http://www.asus.com/Search/?SearchKey=S56CAで検索するS56CAと、サイトはhttp://www.asus.com/Notebooks_Ultrabooks/S56CA/ページにリダイレクトされます。これは、結果ページにとどまるものを検索する場合とは異なります。TAICHI 21

これらはそれぞれ異なる動作であるため、コードはケースごとに異なる方法で処理する必要があります。

元のコードを変更して、次のように機械化ログを含めました。

require 'nokogiri'
require 'mechanize'

# Logging 
require 'logger'

mechanize_logger = Logger.new('mechanize.log')
mechanize_logger.level = Logger::INFO

agent = Mechanize.new
agent.log = mechanize_logger

#User Agent masking
agent.user_agent_alias = 'Windows Mozilla'

search_terms = [ 'S56CA', 'TAICHI 21' ]
results_file = File.open( 'results.txt', 'w' )

#Take our search array, insert it into a query
search_terms.each do |search|
  page = agent.get("http://www.asus.com/Search/?SearchKey=#{search}")
  links =  page.links.find_all{ |l| l.text =~ /#{search}/i}
  links.each { |links_text| results_file.write( "#{links_text}\n" ) }
end 
results_file.close

このコードを実行すると、プログラムの出力ASUS TAICHI 21は に書き込まれるだけですresults.txt

ファイルには次のmechanize.log内容が含まれており、2 つの検索の違いを示しています。

$ more mechanize.log 
I, [2013-01-30T17:49:49.036790 #2142]  INFO -- : Net::HTTP::Get: /Search/?SearchKey=S56CA
I, [2013-01-30T17:49:53.528281 #2142]  INFO -- : status: Net::HTTPFound 1.1 302 Moved Temporarily
I, [2013-01-30T17:49:53.529388 #2142]  INFO -- : follow redirect to: /Notebooks_Ultrabooks/S56CA/
I, [2013-01-30T17:49:53.530106 #2142]  INFO -- : Net::HTTP::Get: /Notebooks_Ultrabooks/S56CA/
I, [2013-01-30T17:49:53.939353 #2142]  INFO -- : status: Net::HTTPOK 1.1 200 OK
I, [2013-01-30T17:49:54.800423 #2142]  INFO -- : Net::HTTP::Get: /Search/?SearchKey=TAICHI%2021
I, [2013-01-30T17:49:55.269454 #2142]  INFO -- : status: Net::HTTPOK 1.1 200 OK

検索ページには content があるためDid you mean to search for、それを使用してコード内の動作を区別できます。

于 2013-01-30T12:25:45.933 に答える