爬虫进阶开发——之图片云托管

当我们需要爬取一个多图网站的时候, 最直接的方法是直接爬取网站中的img标签, 但是, 这种方式经常会导致采集到的图片无法正常显示或显示防盗链图. 这种情况, 选择神箭手的图片云托管服务是最明智的.

那如何使用图片云托管呢?

最简单的方法, 在神箭手后台配置爬虫任务的时候, 勾选“图片云托管”, 选择并配置需要托管的云服务器(包括三种: 七牛云服务器, 阿里云服务器, 神箭手云服务器), 在任务运行时, 就会帮你将采集到的所有图片托管到神箭手云服务器上. 但这种方式只能帮你托管图片url的结尾是.jpg.jpeg.png.gif四种标准图片格式, 不论是img标签中的图片url, 还是单独的图片url.

注意: 如果field字段是一个数组, 数组里的图片不会托管到云服务器上, 栗子如下所示:

var configs = {
    // "configs"的其他成员
    ...
    fields: [
        {
            // 该字段是一个数组, 爬取到的图片不会托管到云服务器上
            name: "img_list",
            selector: "//a[contains(@class,'view_img_link')]//@href",
            repeated: true
        }
    ]
};

这样做当然无法满足各位开发者的需求, 为此, 我们提供了cacheImg内置函数. 目前, cacheImg内置函数只能在afterExtractField回调函数中使用, 可处理img标签中的图片url和单独的图片url, 并将图片托管到云服务器上.

举个栗子:
afterExtractField回调函数中, 通过cacheImg函数将非标准图片托管到云服务器上

configs.afterExtractField = function(fieldName, data, page) {
    if (fieldName == "article_cover_img") {
        return cacheImg(data); // data是图片url, 返回可被云服务器处理的url
    }
    return data;
}