文档章节

WEBCOLLECTION爬图片

嗡嗡作响
 嗡嗡作响
发布于 2017/05/18 19:00
字数 323
阅读 4
收藏 0
public class DemoImageCrawler extends BreadthCrawler {

    //用于保存图片的文件夹
    File downloadDir;

    //原子性int,用于生成图片文件名
    AtomicInteger imageId;

    /**
     * 
     * @param crawlPath 用于维护URL的文件夹
     * @param downloadPath 用于保存图片的文件夹
     */
    public DemoImageCrawler(String crawlPath, String downloadPath) {
        super(crawlPath, true);
        downloadDir = new File(downloadPath);
        if(!downloadDir.exists()){
            downloadDir.mkdirs();
        }
        computeImageId();
    }

    @Override
    public void visit(Page page, CrawlDatums next) {
        //根据http头中的Content-Type信息来判断当前资源是网页还是图片
        String contentType = page.getResponse().getContentType();
        if(contentType==null){
            return;
        }else if (contentType.contains("html")) {
            //如果是网页,则抽取其中包含图片的URL,放入后续任务
            Elements imgs = page.select("img[src]");
            for (Element img : imgs) {
                String imgSrc = img.attr("abs:src");
                next.add(imgSrc);
            }

        } else if (contentType.startsWith("image")) {
            //如果是图片,直接下载
            String extensionName=contentType.split("/")[1];
            String imageFileName=imageId.incrementAndGet()+"."+extensionName;
            File imageFile=new File(downloadDir,imageFileName);
            try {
                FileUtils.writeFile(imageFile, page.getContent());
                System.out.println("保存图片 "+page.getUrl()+" 到 "+imageFile.getAbsolutePath());
            } catch (IOException ex) {
                throw new RuntimeException(ex);
            }
        }

    }

    public static void main(String[] args) throws Exception {
        DemoImageCrawler demoImageCrawler = new DemoImageCrawler("crawl", "download");
        //添加种子URL
        demoImageCrawler.addSeed("http://***.com/");
        //限定爬取范围
        demoImageCrawler.addRegex("http://***.com/.*");
        //设置为断点爬取,否则每次开启爬虫都会重新爬取
        demoImageCrawler.setResumable(true);
        demoImageCrawler.setThreads(30);
        Config.MAX_RECEIVE_SIZE = 1000 * 1000 * 10;
        demoImageCrawler.start(3);
    }

    public void computeImageId(){
        int maxId=-1;
        for(File imageFile:downloadDir.listFiles()){
            String fileName=imageFile.getName();
            String idStr=fileName.split("\\.")[0];
            int id=Integer.valueOf(idStr);
            if(id>maxId){
                maxId=id;
            }
        }
        imageId=new AtomicInteger(maxId);
    }

}

此为代码demo,下图为jar包,已测试,可以爬取图片资源

所需要的jar包为

© 著作权归作者所有

共有 人打赏支持
下一篇: 微信公众号
嗡嗡作响
粉丝 1
博文 29
码字总数 21637
作品 0
成都
程序员
私信 提问
python学习 三 04 图片爬虫工程-组织框架

Python安装 python学习 一 python语法,及变量类型 python学习 二 爬一个图片网站上 python学习 二 02 爬一个图片网站,获得主链接网址,并保存 python学习 二 03 爬一个图片网站-获得所有分...

gudianxiaoshuo
01/14
0
0
大二学生看到班级群老斗图!他爬了十万张表情包!获得称号斗图帝

爬图片比爬文字数据要好玩得多了,但是由于图片比文字所占内存更大,所以所耗的时间会多一些,因此可以尝试使用多线程爬虫来爬取网站的图片。 再来看看页面页码的元素: 要获取的是总页面数1...

919b0c54458f
07/17
0
0
python爬美女图片

python爬美女图片 放按钮.PM2017-12-241 阅读 python图片 背景 为了MKMM项目,爬妹子图片,标注样本 从校花网跟4439两个网站爬了一些。 具体说明 代码如下: 校花网 4439 点赞 python图片 作...

放按钮.PM
2017/12/24
0
0
使用Python爬虫爬取简单网页(Python爬虫入门)

今天我们来看一看使用Python爬取一些简单的网页。 所用工具:IDLE (Python 3.6 64-bit) 一. 爬取京东商品页面 我将要爬取的是这个东京商品页面信息,代码如下: 二. 爬取亚马逊商品页面 我接...

小_橙_子
08/01
0
0
python使用BeautifulSoup爬取pixabay上的图片

最近也学了一些python的基础知识,写个小爬虫,爬取上的图片并保存到本地。好,我们开始吧。 先说一下我们使用的工具和python包 python 3.6 bs4 BeautifulSoup xlwt (用于保存到本地Excel) ...

大众的众
2017/06/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Netty 简单服务器 (三)

经过对Netty的基础认识,设计模型的初步了解,来写个测试,试试手感 上篇也说到官方推荐我们使用主从线程池模型,那就选择这个模型进行操作 需要操作的步骤: 需要构建两个主从线程组 写一个服务器...

_大侠__
10分钟前
1
0
day02:管道符、shell及环境变量

1、管道符:"|" 用于将前一个指令的输出作为后一个指令的输入,且管道符后面跟的是命令(针对文档的操作):cat less head tail grep cut sort wc uniq tee tr split sed awk等) [root@localho...

芬野de博客
21分钟前
8
0
Kubernetes系列——Kubernetes 组件、对象(二)

一、Kubernetes 组件 介绍了Kubernetes集群所需的各种二进制组件。 Master 组件 Master组件提供集群的管理控制中心。Master组件可以在集群中任何节点上运行。但是为了简单起见,通常在一...

吴伟祥
30分钟前
12
0
Flink-数据流编程模型

1、抽象等级 Flink提供了不同级别的抽象来开发流/批处理应用程序。 1) 低层级的抽象 最低层次的抽象仅仅提供有状态流。它通过Process函数嵌入到DataStream API中。它允许用户自由地处理来自一...

liwei2000
48分钟前
6
0
Java开发Swing实战JFrame和JTabbedPane容器的用法详细解析

概述: 项目是一个桌面程序,涉及标签和按钮组件、布局管理器组件、面板组件、列表框和下拉框组件等组件,以及Swing事件处理机制。 下面先从最基础的界面开始。 /** * @author: lishuai * @...

金铭鼎IT教育
53分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部