我正试图用Nokogiri从Instagram中提取一个图像我已经尝试了太多的事情,我甚至不认为这是一个好主意,以显示我所做的一切到目前为止。
我先说:

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

我注意到Instagram.com上的图片位于以下部分:
<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">

最佳答案

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"

关于ruby - 使用Nokogiri从Instagram提取图像?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20059292/

10-14 08:40