文档章节

WEBCOLLECTION爬图片

嗡嗡作响
 嗡嗡作响
发布于 2017/05/18 19:00
字数 323
阅读 24
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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包为

上一篇: easyui解析树形
下一篇: java操作excel
嗡嗡作响
粉丝 1
博文 31
码字总数 23830
作品 0
成都
程序员
私信 提问
加载中
请先登录后再评论。
python学习 三 04 图片爬虫工程-组织框架

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

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

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

919b0c54458f
2018/07/17
0
0
python学习 三 01 再爬一个网站,几行代码,搞定分类类别

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

shuilan0066
2018/01/10
0
0
爬取妹子图(requests + BeautifulSoup)

  刚刚入门爬虫,今天先对于单个图集进行爬取,过几天再进行翻页爬取。   使用requests库和BeautifulSoup库   目标网站:妹子图 今天是对于单个图集的爬取,就选择一个进行爬取,我选择...

osc_cddopi4y
2018/03/04
3
0

没有更多内容

加载失败,请刷新页面

加载更多

Java知识点--卫语句

在《阿里巴巴Java开发手册》中强制规定:超过 3 层的 if-else 的逻辑判断代码可以使用卫语句、策略模式、状态模式等来实现,其中卫语句即代码逻辑先考虑失败、异常、中断、退出等直接返回的情...

HLee
5分钟前
0
0
实施与扩展:何时使用? 有什么不同? - Implements vs extends: When to use? What's the difference?

问题: 请用一种易于理解的语言或一些文章的链接进行解释。 解决方案: 参考一: https://stackoom.com/question/jTkh/实施与扩展-何时使用-有什么不同 参考二: https://oldbug.net/q/jTkh/...

技术盛宴
6分钟前
0
0
剑指offer之队列中的最大值(C++/Java双重实现)

1.题目描述 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回...

osc_jvzgahav
8分钟前
0
0
JAVA-过滤器和拦截器1

1、过滤器 (Filter) 过滤器的配置比较简单,直接实现 Filter 接口即可,也可以通过 @WebFilter 注解实现对特定 URL 拦截,看到 Filter 接口中定义了三个方法。 init() :该方法在容器启动初始...

osc_hinb5m98
10分钟前
0
0
模拟红包算法(基于BigDecimal、DecimalFormat、Random类)

基于BigDecimal、DecimalFormat、Random实现模拟红包算法 RedPacket 类 import java.math.BigDecimal;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Rand......

osc_ml6lx2h4
11分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部