Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何进行机械化多搜索?_Ruby_Mechanize - Fatal编程技术网

Ruby 如何进行机械化多搜索?

Ruby 如何进行机械化多搜索?,ruby,mechanize,Ruby,Mechanize,我想知道是否可以使用一个数组执行多个mechanize查询?以下代码减去数组后,可以很好地处理单个查询,但不能处理多个查询 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 <&

我想知道是否可以使用一个数组执行多个mechanize查询?以下代码减去数组后,可以很好地处理单个查询,但不能处理多个查询

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
需要“nokogiri”
需要“机械化”
agent=Mechanize.new
#用户代理屏蔽
agent.user\u agent\u别名='Windows Mozilla'
#要搜索的关键字数组
search=Array.new

搜索使用搜索
S56CA
时,网站将重定向到第页。这与搜索结果页面上的
太极21
不同

每种情况都是不同的行为,因此代码应该以不同的方式处理每种情况

我修改了您的原始代码,将mechanize日志记录包括在内,如下所示:

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
文件包含以下内容,显示了两个搜索之间的差异:

$ 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

由于搜索页面的内容为“您是否打算搜索”
,因此可以使用该内容区分代码中的行为

您将如何从浏览器中执行相同的搜索?网站上的搜索栏似乎不支持搜索多个项目。似乎没有一种方法可以同时搜索“太极21”和“S56CA”。是的,我希望一次搜索一个结果,将结果写入结果。TXT没问题,对于“S56CA”结果,我希望无论如何都能得到,这样我就可以获得它的规格。“太极21”我只需要告诉机械化跟随链接;因此,您可以使用mechanize进行多个查询,对吗?或者你问题的任何部分还没有得到回答?好吧,我想我的大脑正在融化,我尝试获取链接,但是现在使用原始代码的文件重定向,我无法获得正确的语法:(:-)看起来你使用数组有困难。看看我答案中的代码示例,我有基本的ruby经验,但我喜欢在最了解的人的帮助下,边做边试,我需要机械化来帮助我完成库存工作。
$ 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