重定向后使用Ruby Mechanize下载XLS文件时出现不明原因的不一致

时间:2012-12-25 22:00:40

标签: ruby web-scraping mechanize mechanize-ruby

我有一个访问fcc.gov的脚本,然后点击一个触发下载的链接:

require "mechanize"

docket_number = "12-268" #"96-128"

url = "http://apps.fcc.gov/ecfs/comment_search/execute?proceeding=#{docket_number}"
agent = Mechanize.new
agent.pluggable_parser.default = Mechanize::DirectorySaver.save_to 'downloads'

agent.get(url) do |page|
    link = page.link_with(:text => "Export to Excel file")
    xls = agent.click(link)
end

docket_number为“12-268”时,此方法正常。但当您将其更改为“96-128”时,Mechanize会下载页面的html而不是所需的电子表格。

两个页面的网址都是:

正如您所看到的,如果您在浏览器中访问每个页面(我正在使用Chrome)并单击“导出到Excel文件”,则会下载电子表格文件并且没有问题。 “96-128”还有更多行,因此当您单击“导出”链接时,它会将您带到一个新页面,该页面每10秒左右刷新一次,直到文件开始下载。我怎样才能解决这个问题?为什么会出现这种不一致?

2 个答案:

答案 0 :(得分:1)

单击96-128上的导出将转到使用此类标记刷新的页面(之前我从未听说过):

<meta http-equiv="refresh" content="5;url=/ecfs/comment_search/export?exportType=xls"/>

默认情况下,Mechanize不会跟随这些刷新。要解决此问题,请更改agent上的设置:

agent.follow_meta_refresh = true

来源:https://stackoverflow.com/a/2166480/94154

答案 1 :(得分:0)

进程12-268有48个条目,96-128有4046个。 当我点击后者的“导出到Excel文件”时,有时会出现一个页面:

  

完成处理4046条记录中的933条。   如果此页面未自动重新加载,请单击。

我猜机械化也是这样看的。