Java爬虫一键爬取结果并保存为Excel
Java爬虫一键爬取结果并保存为Excel
将爬取结果保存为一个Excel表格
官方没有给出导出Excel 的教程 这里我就发一个导出为Excel的教程
导包
因为个人爱好 我喜欢用Gradle所以这里就弄Gradle配置
//爬虫包
compile group: 'us.codecraft', name: 'webmagic-core', version: '0.7.3'
compile group: 'us.codecraft', name: 'webmagic-extension', version: '0.7.3'
//poi包 office操作
compile group: 'org.apache.poi', name: 'poi', version: '4.0.1'
maven的话也发一个吧
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<!-- 爬虫包 -->
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-core</artifactId>
<version>0.7.3</version>
</dependency>
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-extension</artifactId>
<version>0.7.3</version>
</dependency>
实现原理
这里我实现了Pipeline接口这个接口是保存结果的
从这个接口里进行保存操作
这里的save()命令加了个synchronized的目的是为了防止多线程操作的时候出现线程安全的问题
实现代码
下面请看Java代码
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import us.codecraft.webmagic.*;
import us.codecraft.webmagic.pipeline.Pipeline;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Selectable;
import us.codecraft.webmagic.utils.FilePersistentBase;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* 爬虫爬取结果导出到Excel
* extends
* FilePersistentBase 文件保存的父类 提供创建目录等方便的操作
*
* implements:
* PageProcessor 爬虫的页面操作
* Pipeline 爬取的结果操作
*/
public class WebmagicAndPoiDemo extends FilePersistentBase implements PageProcessor,Pipeline {
public WebmagicAndPoiDemo(){
logger = LoggerFactory.getLogger(getClass());
site = Site.me().setTimeOut(1000).setRetryTimes(3);
//设置保存路径
setPath("G:\\IdeaProjects\\WebMagicDemo\\Temp\\");
filename = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) +".xls";
//创建工作薄对象
workbook = new HSSFWorkbook();//这里也可以设置sheet的Name
//创建工作表对象
sheet = workbook.createSheet("爬取结果");
//创建工作表的行
HSSFRow row = sheet.createRow(rows);
row.createCell(0).setCellValue("id");
row.createCell(1).setCellValue("名称");
row.createCell(2).setCellValue("连接地址");
rows++;
}
private String filename;
private int rows = 0;
private HSSFWorkbook workbook;
private HSSFSheet sheet;
private Site site;
private Logger logger;
@Override
public Site getSite() {
return site;
}
@Override/** 这个是Pipeline的方法 **/
public void process(ResultItems resultItems, Task task) {
List<String> hrefs = resultItems.get("href");
List<String> texts = resultItems.get("text");
logger.debug(hrefs.toString());
logger.debug(texts.toString());
for (int i=0;i<hrefs.size();i++){
//创建工作表的行
HSSFRow row = sheet.createRow(rows);
row.createCell(0).setCellValue(rows);
row.createCell(2).setCellValue(hrefs.get(i));
row.createCell(1).setCellValue(texts.get(i));
rows++;
}
save();
}
/** 保存表格 **/
private synchronized void save() {
try {
//文档输出
FileOutputStream out = new FileOutputStream(getFile(this.path).getPath()+"\\"+filename);
workbook.write(out);
out.close();
logger.info(this.path+"\\"+filename+"存储完毕");
} catch (IOException e) {
logger.warn("存储失败", e);
}
}
@Override/** 这个是PageProcessor的方法 **/
public void process(Page page) {
Selectable html = page.getHtml();
Selectable href = html.$(".postTitle2","href");
Selectable text = html.$(".postTitle2","text");
page.putField("href",href.all());
page.putField("text",text.all());
}
public static void main(String[] args) {
//爬取自己的博客的帖子
WebmagicAndPoiDemo app = new WebmagicAndPoiDemo();
Spider.create(app).addPipeline(app)
.addUrl("https://www.cnblogs.com/xiaoshuai123/").thread(1).run();
}
}
Java爬虫一键爬取结果并保存为Excel的更多相关文章
- Java爬虫实践--爬取CSDN网站图片为例
实现的效果,自动在工程下创建Pictures文件夹,根据网站URL爬取图片,层层获取.在Pictures下以网站的层级URL命名文件夹,用来装该层URL下的图片.同时将文件名,路径,URL插入数据库, ...
- java爬虫实现爬取百度风云榜Top10
最近在项目中遇到了java和python爬虫进行程序调用和接口对接的问题, 刚开始也是调试了好久才得出点门道. 而后,自己也发现了爬虫的好玩之处,边想着用java来写个爬虫玩玩,虽说是个不起眼的dem ...
- java爬虫-简单爬取网页图片
刚刚接触到“爬虫”这个词的时候是在大一,那时候什么都不明白,但知道了百度.谷歌他们的搜索引擎就是个爬虫. 现在大二.再次燃起对爬虫的热爱,查阅资料,知道常用java.python语言编程,这次我选择了 ...
- 【Java爬虫】爬取南通大学教务处成绩
没使用自动登录,所以获取是比较麻烦.. 1.http://jwgl.ntu.edu.cn/cjcx 进入官网,进行账号密码登录 2.点击全部成绩查询(也一定要点进去,不然cookie不会返回值) ...
- java爬虫,爬取当当网数据
背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...
- 【转】java爬虫,爬取当当网数据
背景:女票快毕业了(没错!我是有女票的!!!),写论文,主题是儿童性教育,查看儿童性教育绘本数据死活找不到,没办法,就去当当网查询下数据,但是数据怎么弄下来呢,首先想到用Python,但是不会!!百 ...
- Java两种方式简单实现:爬取网页并且保存
注:如果代码中有冗余,错误或者不规范,欢迎指正. Java简单实现:爬取网页并且保存 对于网络,我一直处于好奇的态度.以前一直想着写个爬虫,但是一拖再拖,懒得实现,感觉这是一个很麻烦的事情,出现个小错 ...
- 使用htmlparse爬虫技术爬取电影网页的全部下载链接
昨天,我们利用webcollector爬虫技术爬取了网易云音乐17万多首歌曲,而且还包括付费的在内,如果时间允许的话,可以获取更多的音乐下来,当然,也有小伙伴留言说这样会降低国人的知识产权保护意识,诚 ...
- python 爬虫之爬取大街网(思路)
由于需要,本人需要对大街网招聘信息进行分析,故写了个爬虫进行爬取.这里我将记录一下,本人爬取大街网的思路. 附:爬取得数据仅供自己分析所用,并未用作其它用途. 附:本篇适合有一定 爬虫基础 crawl ...
随机推荐
- supersockets多个 listener
你可以增加一个子节点 "listeners" 用于添加多对监听 ip/port: <superSocket> <servers> <server na ...
- 浏览器间CSS样式兼容问题
1.display:table居中显示 在chrome和safari浏览器上兼容问题 2.滤镜 在chrome浏览器中能正常显示,在360浏览器中不能正常显示 3.省略号问题 对于一行显示,基本上对所 ...
- java什么叫面向对象?
面向对象(Object-Oriented,简称OO)就是一种常见的程序结构设计方法. 面向对象思想的基础是将相关的数据和方法放在一起,组合成一种新的复合数据类型,然后使用新创建的复合数据类型作为项目的 ...
- IP地址和物理地址有什么区别
所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址.简单地说就是你在整个互联网上的ID. MAC(Media Access Control,介质访问控制)地址 (物理地址)是 ...
- 原生js实现响应式轮播图,支持电脑端点击切图,手机端滑动切图
轮播图的实现原理并不难,但是步骤有些繁琐.最近练习了一个轮播图,大部分是跟着网上的教程写的,然后自己做了一点兼容ie8的修改,加了点击切换图片的特效和手机端的滑动特效,让这个轮播图可以在响应式的网站中 ...
- 对input输入框日期显示格式化
先:导入fmt标签 在对input框进行属性设置 <input type="text" name="createtime" value="&l ...
- H3C MSTP
- dotnet 使用 lz4net 压缩 Stream 或文件
在 dotnet 可以使用 LZ4 这个无损的压缩算法,这个压缩算法的压缩率不高但是速度很快.这个库支持在 .NET Standard 1.6 .NET Core .NET Framework Mon ...
- Jenkins安装部署与使用
一.Jenkins平台安装部署 Jenkins官网免费获取Jenkins软件,官网地址为:http://mirrors.jenkins-ci.org/下载稳定的Jenkins版本.由于Jenkins是 ...
- IDEA Maven创建多个Module相互依赖
1.前言 在大型企业项目中,系统架构复杂多变,一个项目根本无法支撑起所有业务.为了提高项目扩展性.灵活性.重用性,封装性,将项目分为多个Module是非常必要的. 这里就不说IDEA如何安装了,安装好 ...