我有一个网站显示我的大学小组的出版物。
我编写了一个快速而又脏的Ruby脚本来解析包含这些数据的CSV文件(我从ISI Web of Science网站手动获取),并以HTML格式呈现它。
CSV文件中没有与PDF文件的直接链接。相反,我可以使用信息去doi.org,它可以转发到真实页面(由期刊托管),并附带PDF链接。
我希望能够为CSV文件中的每个出版物转到该网页,然后抓取PDF。
我以前从未这样做过。在终端中使用wget,这很好,除了期刊网站上的HTML链接只是“/ link info”,没有TLD信息。
有人可以推荐一种简单的方法吗?
答案 0 :(得分:1)
我并不完全清楚你要做什么,但你可以用Mechanize或watir完成它。 Mechanize直接解析和与网站交互,但它不支持Javascript的方式。 Watir允许您驾驶实际的浏览器。哪种方式最适合你取决于你实际在做什么。
答案 1 :(得分:1)
我不知道红宝石,但doi.org会返回一个重定向作为HTTP代码302(暂时移动),以及一个名为“Location:”的标题,其中包含发布者的网站链接。然后你将不得不刮取该页面以找到PDF。
答案 2 :(得分:1)
一个简单的解决方案是在ruby中使用wget。
system("wget -O \"#{target}\" \"#{source\"")
更清洁的解决方案是使用Net :: HTTP。以下示例取自Net :: HTTP文档。有关详细信息,请查看http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html。
require 'net/http'
require 'uri'
def fetch(uri_str, limit = 10)
# You should choose better exception.
raise ArgumentError, 'HTTP redirect too deep' if limit == 0
response = Net::HTTP.get_response(URI.parse(uri_str))
case response
when Net::HTTPSuccess then response
when Net::HTTPRedirection then fetch(response['location'], limit - 1)
else
response.error!
end
end
答案 3 :(得分:0)
由于你已经在编写Ruby,这似乎非常适合ScRUBYt。