开源框架WebCollector抓取图片初试

2024-04-05 07:08

本文主要是介绍开源框架WebCollector抓取图片初试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

官网地址:https://github.com/CrawlScript/WebCollector 。这是java版本,如果想要体验Python版本的话请移步 https://github.com/CrawlScript/WebCollector-Python

其它介绍文章

  • https://www.freesion.com/article/255392486/
  • https://blog.csdn.net/AJAXHu/article/details/81108253

废话不多说,直接进入正题。首先用maven引入相关依赖,目前最新的是2.73-alpha版本

<dependency><groupId>cn.edu.hfut.dmic.webcollector</groupId><artifactId>WebCollector</artifactId><version>2.73-alpha</version>
</dependency>

具体如何使用请看下面示例代码,用来抓取网站的图片,具体哪个网站不太方便给出来,大家自行尝试。

import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;
import cn.edu.hfut.dmic.webcollector.model.Page;
import cn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler;
import cn.edu.hfut.dmic.webcollector.util.ExceptionUtils;
import cn.edu.hfut.dmic.webcollector.util.FileUtils;
import cn.edu.hfut.dmic.webcollector.util.MD5Utils;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.File;/*** 继承 BreadthCrawler(广度爬虫)* BreadthCrawler 是 WebCollector 最常用的爬取器之一** @author hu*/
public class DemoCrawler extends BreadthCrawler {File baseDir = new File("images");/*** 构造一个基于伯克利DB的爬虫* 伯克利DB文件夹为crawlPath,crawlPath中维护了历史URL等信息* 不同任务不要使用相同的crawlPath* 两个使用相同crawlPath的爬虫并行爬取会产生错误** @param crawlPath 伯克利DB使用的文件夹*/public DemoCrawler(String crawlPath) {//设置是否自动解析网页内容super(crawlPath, true);//只有在autoParse和autoDetectImg都为true的情况下//爬虫才会自动解析图片链接//getConf().setAutoDetectImg(true);//如果使用默认的Requester,需要像下面这样设置一下网页大小上限//否则可能会获得一个不完整的页面//下面这行将页面大小上限设置为10M//getConf().setMaxReceiveSize(1024 * 1024 * 10);//添加种子URLaddSeed("http://www.xxx.com");//限定爬取范围addRegex("http://image.xxx.com/.*");addRegex("-.*#.*");addRegex("-.*\\?.*");//设置线程数setThreads(10);}@Overridepublic void visit(Page page, CrawlDatums next) {//根据http头中的Content-Type信息来判断当前资源是网页还是图片String contentType = page.contentType();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");if (imgSrc.indexOf("thumb") < 0) {next.add(imgSrc);}}} else if (contentType.startsWith("image")) {//如果是图片,直接下载String extensionName = contentType.split("/")[1];try {byte[] image = page.content();//限制文件大小 10kif (image.length < 10240) {return;}//根据图片MD5生成文件名String fileName = String.format("%s.%s", MD5Utils.md5(image), extensionName);File imageFile = new File(baseDir, fileName);FileUtils.write(imageFile, image);System.out.println("保存图片 " + page.url() + " 到 " + imageFile.getAbsolutePath());} catch (Exception e) {ExceptionUtils.fail(e);}}}// 主要解决下载图片出现403的问题// 自定义的请求插件// 可以自定义User-Agent和Cookiepublic static class MyRequester extends OkHttpRequester {String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36";// 每次发送请求前都会执行这个方法来构建请求@Overridepublic Request.Builder createRequestBuilder(CrawlDatum crawlDatum) {// 这里使用的是OkHttp中的Request.Builder// 可以参考OkHttp的文档来修改请求头return super.createRequestBuilder(crawlDatum).removeHeader("User-Agent")  //移除默认的UserAgent.addHeader("Referer", "http://www.xxx.com").addHeader("User-Agent", userAgent);}}public static void main(String[] args) throws Exception {//crawl为日志目录DemoCrawler demoImageCrawler = new DemoCrawler("crawl");demoImageCrawler.setRequester(new MyRequester());//设置为断点爬取,否则每次开启爬虫都会重新爬取demoImageCrawler.setResumable(true);//爬取深度demoImageCrawler.start(5);}
}

示例代码参考了以下来源,稍微优化了一下
http://datahref.com/archives/132

这篇关于开源框架WebCollector抓取图片初试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/877934

相关文章

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细

Java如何根据文件名前缀自动分组图片文件

《Java如何根据文件名前缀自动分组图片文件》一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用Java根据文件名前缀自动分组图... 目录需求背景分析思路实现代码输出结果知识扩展需求一大堆文件(比如图片)堆在一个目录下,它们的命名规