主函数CrawlDemo.java

import com.google.common.io.Files;
import com.virjar.sipsoup.parse.XpathParser;
import com.virjar.vscrawler.core.VSCrawler;
import com.virjar.vscrawler.core.VSCrawlerBuilder;
import com.virjar.vscrawler.core.event.support.AutoEvent;
import com.virjar.vscrawler.core.event.support.AutoEventRegistry;
import com.virjar.vscrawler.core.event.systemevent.SeedEmptyEvent;
import com.virjar.vscrawler.core.net.session.CrawlerSession;
import com.virjar.vscrawler.core.processor.CrawlResult;
import com.virjar.vscrawler.core.processor.SeedProcessor;
import com.virjar.vscrawler.core.seed.Seed;
import com.virjar.vscrawler.core.util.PathResolver;
import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup;
import java.io.File;
import java.io.IOException;public class CrawlDemo {public static void main(String[] args) throws IOException {VSCrawler vsCrawler = VSCrawlerBuilder.create().addPipeline(new EmptyPipeline()).setProcessor(new SeedProcessor() {private void handlePic(Seed seed, CrawlerSession crawlerSession) {byte[] entity = crawlerSession.getCrawlerHttpClient().getEntity(seed.getData());if (entity == null) {seed.retry();return;}try {Files.write(entity, // 文件根据网站,路径,base自动计算new File(PathResolver.onlySource("E:/testpic", seed.getData())));} catch (IOException e) {e.printStackTrace();}}public void process(Seed seed, CrawlerSession crawlerSession, CrawlResult crawlResult) {if (StringUtils.endsWithIgnoreCase(seed.getData(), ".jpg")) {handlePic(seed, crawlerSession);} else {String s = crawlerSession.getCrawlerHttpClient().get(seed.getData());if (s == null) {seed.retry();return;}// 将下一页的链接和图片链接抽取出来crawlResult.addStrSeeds(XpathParser.compileNoError("/css('#pages a')::self()[contains(text(),'下一页')]/absUrl('href') | /css('.content')::center/img/@src").evaluateToString(Jsoup.parse(s, seed.getData())));}}}).build();// 清空历史爬去数据,或者会断点续爬vsCrawler.clearTask();vsCrawler.pushSeed("https://www.meitulu.com/item/2125.html");vsCrawler.pushSeed("https://www.meitulu.com/item/6892.html");vsCrawler.pushSeed("https://www.meitulu.com/item/2124.html");vsCrawler.pushSeed("https://www.meitulu.com/item/2120.html");vsCrawler.pushSeed("https://www.meitulu.com/item/2086.html");vsCrawler.pushSeed("https://www.meitulu.com/item/2066.html");vsCrawler.addCrawlerStartCallBack(new VSCrawler.CrawlerStartCallBack() {public void onCrawlerStart(final VSCrawler vsCrawler) {AutoEventRegistry.getInstance().registerEvent(ShutDownChecker.class);AutoEventRegistry.getInstance().registerObserver(new ShutDownChecker() {public void checkShutDown() {// 15s之后检查活跃线程数,发现为0,证明连续10s都没用任务执行了if (vsCrawler.activeWorker() == 0&& (System.currentTimeMillis() - vsCrawler.getLastActiveTime()) > 10000) {System.out.println("尝试停止爬虫");vsCrawler.stopCrawler();}}});AutoEventRegistry.getInstance().registerObserver(new SeedEmptyEvent() {public void onSeedEmpty() {// 如果收到任务为空消息的话,尝试停止爬虫// 发送延时消息,当前收到了任务为空的消息,产生一个发生在15s之后发生的事件,AutoEventRegistry.getInstance().createDelayEventSender(ShutDownChecker.class, 15000).delegate().checkShutDown();}});}});// 开始爬虫vsCrawler.start();}interface ShutDownChecker {@AutoEventvoid checkShutDown();}
}

EmptyPipeline.java 实现Pipeline接口

import java.util.Collection;import com.virjar.vscrawler.core.seed.Seed;
import com.virjar.vscrawler.core.serialize.Pipeline;public class EmptyPipeline implements Pipeline {public void saveItem(Collection<String> itemJson, Seed seed) {System.out.println(seed.getData() + " 处理完成");}
}

实测在https://www.meitulu.com网站中不到半分钟能畅通无阻爬取近600张妹纸图,效率不错!

VSCrawler 爬取美女图片相关推荐

  1. Scrapy爬取美女图片续集 (原创)

    上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...

  2. python爬取美女图片的练习

    python 爬取美女图片的练习 主要使用 xpath 定位获取 图片的链接 本次练习使用到os库 ,lmxl库 , requests库 import requests from lxml impor ...

  3. node.js爬取美女图片(一)

    node.js爬取美女图片 一.准备工作 首先找一个美女图片网站,这里我选用的是唯美女生,看起来像一个个人维护的网站. 分析页面结构: 1.主页主体部分就是图集列表: 2.URL的形式为 BaseUr ...

  4. 使用python3爬取美女图片

    给大佬们观赏观赏,爬取美女图片,各位大佬们小心身子哈. #目标:爬取网页所有图片并保存到本地 #目标url = http://www.umei.cc/tags/meishaonv_1.htm impo ...

  5. Scrapy爬取美女图片续集

    上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...

  6. 爬取美女图片保存本地与入MySQL库(宅男福利)

    本文详细记录如何爬取美女图片,并将图片下载保存在本地,同时将图片url进行入库.保存在本地肯定是为了没事能拿出来养养眼啊,那入库就是为了定位图片啊,要懂点技术的话,还能搬运搬运做个小图片网站,不为别的 ...

  7. Python网络爬虫(四):selenium+chrome爬取美女图片

    说明: Python版本:Python IDE:PyCharm chrome版本:我的版本63 chromedriver.exe:因为是模拟浏览器访问,chrome需要再下载一个驱动,具体方式在我的上 ...

  8. python爬虫爬取美女图片(selenium)

    之前爬一个美女图片网站,因为是动态加载网站,爬下来的图片全是转呀转的GIF图,气死我了,学了selenium之后,龙王归来,势在必得 先看需要的库 from selenium import webdr ...

  9. python爬虫实践之爬取美女图片

    目录 概述 准备 所需模块 涉及知识点 运行效果 完成爬虫 1. 分析网页 2. 爬虫代码 概述 爬取妹子图网的美女图片. 准备 所需模块 time requests lxml 涉及知识点 pytho ...

  10. scrapy-redis分布式爬虫爬取美女图片

    背景: 爬取目标:(你懂得) url: h t t p s : / / w w w . j p x g y w . c o m 为什么要用scrapy-redis: 为什么用scrapy-redis, ...

最新文章

  1. Alluxio HA 写入文件失败
  2. java map常用类及其方法_Day50.Map类常用的方法 -Java常用类、集合#、IO
  3. 汇编语言 向内存0:200~0:23f依次传送数据0~63(3fh)
  4. 有道词典Linux版下载安装
  5. 福利 | 2018 年,程序员全新的技术之路
  6. python如何实现日期格式的转换_python开发中时间格式如何转化?
  7. TYUT程序设计比赛2017回顾
  8. 机器学习的开源工具-开源程序-研究工具
  9. WCF透明代理类,动态调用,支持async/await
  10. 20145307《信息安全系统设计基础》第十四周学习总结
  11. 基于深度学习的手写汉字识别
  12. [半监督学习] Tri-Training: Exploiting Unlabeled Data Using Three Classifiers
  13. 基于图书管理系统的需求分析之威胁建模
  14. 黑客帝国主要人物解读
  15. mysql blob 读取 图片_mysql中以blob形式存储的图片文件 通过ajax方式传输 在js中设置成img控件的src...
  16. JavaScript 隐式类型转换
  17. 利用51单片机+HC-SR04+51单片机制造超声波测距模块
  18. ActiveSync
  19. 关于使用SQLALCHEMY 出现warning 的问题解决【SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and】
  20. Linux 私房菜————Linux系统基本操作命令(十)|引导程序|服务控制

热门文章

  1. 聊聊图标和MBE图标
  2. xgp游戏列表_PC版XGP正式公布,畅玩上百款游戏每月只需10美元
  3. iOS 屏幕旋转的实践解析
  4. html导航栏的渐变效果,html+css+js实现导航栏滚动渐变效果
  5. wpa_supplicant交叉编译
  6. github 使用笔记之高级搜索、项目跳转到在线 IDE -- 网页版 VS code
  7. 上下调基因和代谢物--不同颜色显示在同一张KEGG通路图中
  8. java打印Ascii码
  9. 计算机驱动空间的c盘不足怎么办,C盘磁盘空间不足怎么解决
  10. KC伺服舵机带参控制程序程序