使用Nokogiri从Instagram中提取图像?

时间:2013-11-18 22:28:12

标签: ruby nokogiri instagram

我正在尝试使用Nokogiri从Instagram中提取图像。我尝试了很多事情,我甚至认为展示我到目前为止所做的事情是个好主意。

我开始时:

image_url = Nokogiri::HTML(open('http://instagram.com/p/g3mXJ1p109/'))

我注意到Instagram.com上的图片位于以下div中:

<div class="Image iLoaded iWithTransition Frame" src="http://distilleryimage9.ak.instagram.com/b711daf4508c11e385ff1234c61f9f0f_8.jpg"></div>

好的,我尝试了一件事:

Nokogiri::HTML(open(pic)).css('body script').children.first

它给了我这个:

#<Nokogiri::XML::CDATA:0x767c904 "\nwindow._csrf_token = '88b78a58e333056bcc67e338f06ce786';\nwindow._jscalls = [\n\n['bluebar', 'init', []],\n\n['framework/config', 'init', [{staticRoot: '//d36xtkk24g8jdx.cloudfront.net/bluebar/89c8068'}]],\n\n [\"lib\\/fullpage\\/transitions\",\"bootstrap\",[{\"componentName\":null,\"moduleName\":\"lib\\/ui\\/media\\/DesktopPPage\",\"props\":{\"viewer\":null,\"shortcode\":\"g3mXJ1p109\",\"prerelease\":false,\"staticRoot\":\"\\/\\/d36xtkk24g8jdx.cloudfront.net\\/bluebar\\/89c8068\",\"media\":{\"code\":\"g3mXJ1p109\",\"comments\":{\"nodes\":[]},\"date\":1384805104.0,\"likes\":{\"count\":0,\"viewer_has_liked\":false,\"nodes\":[]},\"owner\":{\"username\":\"marunbai\",\"requested_by_viewer\":false,\"profile_pic_url\":\"http:\\/\\/images.ak.instagram.com\\/profiles\\/anonymousUser.jpg\",\"id\":\"549577518\",\"followed_by_viewer\":false},\"is_video\":false,\"id\":\"592110592901733693\",\"display_src\":\"http:\\/\\/distilleryimage9.ak.instagram.com\\/b711daf4508c11e385ff1234c61f9f0f_8.jpg\"}}}]],\n\n];\n">

1 个答案:

答案 0 :(得分:2)

Nokogiri无法评估JavaScript。因此,如果您查看Nokogiri看到的HTML,您看到的div标记就不会出现。

但是,该页面确实包含带有图像源的元素。您可以从那里提取所需的值:

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('http://instagram.com/p/g3mXJ1p109/'))

p doc.at_css('meta[property="og:image"]')['content']
#=> "http://distilleryimage9.ak.instagram.com/b711daf4508c11e385ff1234c61f9f0f_8.jpg"