时间:2021-05-19
今年十月份以来,跟朋友尝试导入一些图片到tensorflow来生成模型,这就需要大量的图片。刚开始我只写了一个简单的HttpClient程序来抓取图片,后来为了通用性索性写一个简单的图片爬虫程序。它可以用于抓取单张图片、多张图片、某个网页下的所有图片、多个网页下的所有图片。
github地址:https://github.com/fengzhizi715/PicCrawler
这个爬虫使用了HttpClient、RxJava2以及Java 8的一些特性。它支持一些简单的定制,比如定制User-Agent、Referer、Cookies等。
一.下载安装:
对于Java项目如果使用gradle构建,由于默认不是使用jcenter,需要在相应module的build.gradle中配置
repositories { mavenCentral() jcenter()}Gradle:
compile 'com.cv4j.piccrawler:crawler:0.2.1'Maven:
<dependency> <groupId>com.cv4j.piccrawler</groupId> <artifactId>crawler</artifactId> <version>0.2.1</version> <type>pom</type></dependency>二.使用方法:
2.1 下载单张图片
1、普通方式
在这里,timeOut()表示网络请求的超时时间。fileStrategy()表示存放的目录、文件使用的格式、生成的文件时使用何种策略。repeat()表示对该图片请求重复的次数。
PicCrawler支持多种文件的生成策略,比如随机生成文件名、从1开始自增长地生成文件名、生成指定的文件名等等。
下图显示了使用该程序对某验证码的图片下载200次。
2、使用RxJava的方式下载
3、使用RxJava,下载之后的图片还能做后续的处理
在Consumer中,可以对文件做一些后续的处理。
2.2 下载多张图片
List<String> urls = ...; // 多张图片地址的集合 CrawlerClient.get() .timeOut(6000) .fileStrategy(new FileStrategy() { @Override public String filePath() { return "temp"; } @Override public String picFormat() { return "png"; } @Override public FileGenType genType() { return FileGenType.AUTO_INCREMENT; } }) .build() .downloadPics(urls);2.3 下载某个网页的全部图片
String url = "http://pletableFuture.runAsync(() -> downloadPic(url)).get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }); } }3.2 下载多个网页的全部图片
downloadWebPageImages()方法还支持传List集合,表示多个网页的地址。
/** * 下载多个网页的全部图片 * @param urls */ public void downloadWebPageImages(List<String> urls) { if (Preconditions.isNotBlank(urls)) { Flowable.fromIterable(urls) .parallel() .map(url->httpManager.createHttpWithGet(url)) .map(response->parseHtmlToImages(response)) .sequential() .subscribe(list -> downloadPics(list), throwable-> System.out.println(throwable.getMessage())); } }在这里其实用到了ParallelFlowable,因为parallel()可以把Flowable转成ParallelFlowable。
总结
PicCrawler 是一个简单的图片爬虫,目前基本可以满足我的需求。未来要是有新的需求,我会不断添加功能。
在做PicCrawler时,其实还做了一个ProxyPool用于获取可用代理池的库,它也是基于RxJava2实现的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
RxJava2介绍RxJava2发布已经有一段时间了,是对RxJava的一次重大的升级,由于我的一个库cv4j使用了RxJava2来尝鲜,但是RxJava2跟R
本文为大家分享了实现断点续传下载的具体代码,供大家参考,具体内容如下1、基于Ok+Rxjava实现断点续传下载2、基于Ok+Rxjava+Retrofit实现断
前言众所周知,RxJava2中当链式调用中抛出异常时,如果没有对应的Consumer去处理异常,则这个异常会被抛出到虚拟机中去,Android上的直接表现就是c
前言RxJava2、Retrofit2火了有一段时间了,前段时间给公司的项目引入了这方面相关的技术,在此记录一下相关封装的思路。需求封装之前要先明白需要满足哪些
本文实例讲述了Python实现简单的获取图片爬虫功能。分享给大家供大家参考,具体如下:简单Python爬虫,获得网页上的照片#coding=utf-8impor