如何使用mechanize捕获重定向的URL?

时间:2018-04-16 01:49:38

标签: ruby mechanize

我正在使用mechanize访问一个链接,该链接将被重定向到另一个页面,该页面提供了我想要下载的全文pdf。我尝试使用以下代码捕获最终的URL:

link = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?dbfrom=pubmed&retmode=ref&cmd=prlinks&id=29499174"

m = Mechanize.new { |a| a.keep_alive = 1 }

p = m.get(link)

uri = p.uri.to_s

我希望uri成为最终链接,但是如果我捕获的内容(https://linkinghub.elsevier.com/retrieve/pii/S0002-9394(18)30073-4)与我使用浏览器(https://www.sciencedirect.com/science/article/pii/S0002939418300734?via%3Dihub)所发现的内容不同

我该怎么做来捕获最终的网址?与此相关:我想捕获最终链接,因为我需要使用mechanize来点击pdf链接并下载论文。如果不抓取最终网址,我可以这样做吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,我想出了一个糟糕的解决方案:似乎对于所有重定向的网址,最终网址都隐藏在元数据中,如下所示:

[#<Mechanize::Page::MetaRefresh
""
 "/retrieve/articleSelectPrefsPerm?Redirect=https%3A%2F%2Fwww.sciencedirect.com%2Fscience%2Farticle%2Fpii%2FS0161642009005387%3Fvia%253Dihub&key=9ea56f97a6b39bf4e5845b7c6186c7f7a2ea6b15">
]

所以我现在正在做的是使用page.meta_refresh.to_s来获取字符串,然后使用gsub提取url然后使用gsub来清理编码。

我确信那里有更好的 - 如果你有更好的想法,请告诉我。谢谢!