VSCrawler 爬取美女图片
主函数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 爬取美女图片相关推荐
- Scrapy爬取美女图片续集 (原创)
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...
- python爬取美女图片的练习
python 爬取美女图片的练习 主要使用 xpath 定位获取 图片的链接 本次练习使用到os库 ,lmxl库 , requests库 import requests from lxml impor ...
- node.js爬取美女图片(一)
node.js爬取美女图片 一.准备工作 首先找一个美女图片网站,这里我选用的是唯美女生,看起来像一个个人维护的网站. 分析页面结构: 1.主页主体部分就是图集列表: 2.URL的形式为 BaseUr ...
- 使用python3爬取美女图片
给大佬们观赏观赏,爬取美女图片,各位大佬们小心身子哈. #目标:爬取网页所有图片并保存到本地 #目标url = http://www.umei.cc/tags/meishaonv_1.htm impo ...
- Scrapy爬取美女图片续集
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...
- 爬取美女图片保存本地与入MySQL库(宅男福利)
本文详细记录如何爬取美女图片,并将图片下载保存在本地,同时将图片url进行入库.保存在本地肯定是为了没事能拿出来养养眼啊,那入库就是为了定位图片啊,要懂点技术的话,还能搬运搬运做个小图片网站,不为别的 ...
- Python网络爬虫(四):selenium+chrome爬取美女图片
说明: Python版本:Python IDE:PyCharm chrome版本:我的版本63 chromedriver.exe:因为是模拟浏览器访问,chrome需要再下载一个驱动,具体方式在我的上 ...
- python爬虫爬取美女图片(selenium)
之前爬一个美女图片网站,因为是动态加载网站,爬下来的图片全是转呀转的GIF图,气死我了,学了selenium之后,龙王归来,势在必得 先看需要的库 from selenium import webdr ...
- python爬虫实践之爬取美女图片
目录 概述 准备 所需模块 涉及知识点 运行效果 完成爬虫 1. 分析网页 2. 爬虫代码 概述 爬取妹子图网的美女图片. 准备 所需模块 time requests lxml 涉及知识点 pytho ...
- scrapy-redis分布式爬虫爬取美女图片
背景: 爬取目标:(你懂得) url: h t t p s : / / w w w . j p x g y w . c o m 为什么要用scrapy-redis: 为什么用scrapy-redis, ...
最新文章
- Alluxio HA 写入文件失败
- java map常用类及其方法_Day50.Map类常用的方法 -Java常用类、集合#、IO
- 汇编语言 向内存0:200~0:23f依次传送数据0~63(3fh)
- 有道词典Linux版下载安装
- 福利 | 2018 年,程序员全新的技术之路
- python如何实现日期格式的转换_python开发中时间格式如何转化?
- TYUT程序设计比赛2017回顾
- 机器学习的开源工具-开源程序-研究工具
- WCF透明代理类,动态调用,支持async/await
- 20145307《信息安全系统设计基础》第十四周学习总结
- 基于深度学习的手写汉字识别
- [半监督学习] Tri-Training: Exploiting Unlabeled Data Using Three Classifiers
- 基于图书管理系统的需求分析之威胁建模
- 黑客帝国主要人物解读
- mysql blob 读取 图片_mysql中以blob形式存储的图片文件 通过ajax方式传输 在js中设置成img控件的src...
- JavaScript 隐式类型转换
- 利用51单片机+HC-SR04+51单片机制造超声波测距模块
- ActiveSync
- 关于使用SQLALCHEMY 出现warning 的问题解决【SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and】
- Linux 私房菜————Linux系统基本操作命令(十)|引导程序|服务控制