javascript – 节点Jsdom Scrape谷歌的反向图像搜索

我想以编程方式查找给定图像URL的类似图像的URL列表.我找不到任何免费的图片搜索API,所以我试图通过刮掉Google的Search by Image来做到这一点.

如果我有图像URL,例如http://i.imgur.com/oLmwq.png,则导航到https://www.google.com/searchbyimage?&image_url=http://i.imgur.com/oLmwq.png会提供相关的图像和信息.

如何让jsdom.env生成浏览器从上述URL获取的HTML?

这是我尝试过的(CoffeeScript):

jsdom = require 'jsdom'
url = 'https://www.google.com/searchbyimage?&image_url=http://i.imgur.com/oLmwq.png'
jsdom.env
    html: url
    scripts: [ "http://code.jquery.com/jquery.js" ]
    features:
        FetchExternalResources: ['script']
        ProcessExternalResources: ['script']
    done: (errors, window) ->
        console.log window.$('body').html()

您可以看到HTML与我们想要的不匹配.这是Jsdom的HTTP标头的问题吗?

解决方法:

对于像这样的任务,我发现request cheerio比jsdom更容易.我看到你已经找到了答案,但我想我会把它作为替代解决方案.

例:

var request = require('request'),
    cheerio = require('cheerio');

var google = 'https://www.google.com/searchbyimage';
var image = 'http://i.imgur.com/oLmwq.png';

var options = {
  url: google,
  qs: { image_url: image },
  headers: { 'user-agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11' }
};

request(options, function (err, res, body) {
  var $= cheerio.load(body);
  …
});
上一篇:高校学生在家实践ECS弹性云服务器


下一篇:阿里云海外服务器是否需要备案?海外服务器地域节点分布