webmagic框架:http://webmagic.io/

WebMagic的结构分为DownloaderPageProcessorSchedulerPipeline四大组件

PageProcessor主要分为三个部分,分别是爬虫的配置、页面元素的抽取和链接的发现。

Pipeline用于保存结果的组件,下面我们实现自定义Pipeline,可以实现保存结果到文件、数据库等一系列功能

很多功能自己进去慢慢研究哈,这里就不一一赘述了。

下面直接进入主题,爬我的博客首页的数据:https://www.cnblogs.com/loaderman/

查看首页的源码研究一下下:

第一步:maven配置webmagic 详见:http://webmagic.io/docs/zh/posts/ch2-install/with-maven.html

第二步:直接根据文档进行编码实战:

定义实体类

public class LoadermanModel {
private String title;
private String detailUrl;
private String content;
private String date; public LoadermanModel() {
} public LoadermanModel(String title, String detailUrl, String content, String date) {
this.title = title;
this.detailUrl = detailUrl;
this.content = content;
this.date = date;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getDetailUrl() {
return detailUrl;
} public void setDetailUrl(String detailUrl) {
this.detailUrl = detailUrl;
} public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
} public String getDate() {
return date;
} public void setDate(String date) {
this.date = date;
}
}

自定义PageProcessor

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Html; import java.util.ArrayList;
import java.util.List; public class LoadermanPageProcessor implements PageProcessor {
// 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等
private Site site = Site.me().setRetryTimes(5).setUserAgent("User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0"); @Override
public void process(Page page) {
List<String> pageItemList = page.getHtml().xpath("//div[@class='post']").all();
ArrayList<LoadermanModel> list = new ArrayList<>();
for (int i = 0; i < pageItemList.size(); i++) {
Html html = Html.create(pageItemList.get(i));
LoadermanModel loadermanModel=new LoadermanModel();
loadermanModel.setTitle(html.xpath("//a[@class='postTitle2']/text()").toString() );
loadermanModel.setDetailUrl(html.xpath("//a[@class='postTitle2']").links().toString());
loadermanModel.setContent(html.xpath("//div[@class='c_b_p_desc']/text()").toString() );
loadermanModel.setDate(html.xpath("//p[@class='postfoot']/text()").toString() );
list.add(loadermanModel);
} page.putField("data", list); if (page.getResultItems().get("data") == null) {
//skip this page
page.setSkip(true);
} } @Override
public Site getSite() {
return site;
}
}

自定义Pipeline,,对爬取后的数据提取和处理

import com.alibaba.fastjson.JSON;

import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Task;
import us.codecraft.webmagic.pipeline.Pipeline;
import us.codecraft.webmagic.utils.FilePersistentBase; import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter; public class LoadermanlPipeline extends FilePersistentBase implements Pipeline {
public LoadermanlPipeline(String path) {
this.setPath(path);
} public void process(ResultItems resultItems, Task task) {
String path = "LoadermanlPipelineGetData"; try {
PrintWriter printWriter = new PrintWriter(new FileWriter(this.getFile(path+ ".json")));
printWriter.write(JSON.toJSONString(resultItems.get("data")));
printWriter.close();
} catch (IOException var5) { }
}
}

开启爬虫:

    Spider.create(new LoadermanPageProcessor())
.addUrl("https://www.cnblogs.com/loaderman/")
//自定义Pipeline,保存json文件到本地
.addPipeline(new LoadermanlPipeline("D:\\loaderman\\"))
//开启5个线程抓取
.thread(5)
//启动爬虫
.run();

效果如下:

搞定!

【java爬虫】利用webmagic框架实战demo的更多相关文章

  1. 学校实训作业:Java爬虫(WebMagic框架)的简单操作

    项目名称:java爬虫 项目技术选型:Java.Maven.Mysql.WebMagic.Jsp.Servlet 项目实施方式:以认知java爬虫框架WebMagic开发为主,用所学java知识完成指 ...

  2. Java 爬虫之Webmagic

    1. 一个框架,一个领域 一个好的框架必然凝聚了领域知识.WebMagic的设计参考了业界最优秀的爬虫Scrapy,而实现则应用了HttpClient.Jsoup等Java世界最成熟的工具,目标就是做 ...

  3. JAVA 爬虫框架webmagic 初步使用Demo

    一想到做爬虫大家第一个想到的语言一定是python,毕竟python比方便,而且最近也非常的火爆,但是python有一个全局锁的概念新能有瓶颈,所以用java还是比较牛逼的, webmagic 官网 ...

  4. Java爬虫框架WebMagic——入门(爬取列表类网站文章)

    初学爬虫,WebMagic作为一个Java开发的爬虫框架很容易上手,下面就通过一个简单的小例子来看一下. WebMagic框架简介 WebMagic框架包含四个组件,PageProcessor.Sch ...

  5. JAVA爬虫实践(实践三:爬虫框架webMagic和csdnBlog爬虫)

    WebMagic WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个高效.易维护的爬虫. 采用HttpClient可以实现定向的爬虫,也可以自己编写算法逻辑来 ...

  6. Java爬虫框架WebMagic入门——爬取列表类网站文章

    初学爬虫,WebMagic作为一个Java开发的爬虫框架很容易上手,下面就通过一个简单的小例子来看一下. WebMagic框架简介 WebMagic框架包含四个组件,PageProcessor.Sch ...

  7. Java爬虫框架之WebMagic

    一.介绍 WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个高效.易维护的爬虫. 二.如何学习 1.查看官网 官网地址为:http://webmagic.io ...

  8. Java爬虫框架 | 爬小说

    Jsoup,Java爬虫解决方案,中文文档:jsoup   不得不说Java的生态真的好,原来我以为爬虫是只能用Pyhton来写的,结果发现Java的爬虫框架不要太多……       一分钟你就可以写 ...

  9. webmagic的设计机制及原理-如何开发一个Java爬虫

    之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫.最近终于集中精力,花了三天时间,终于写完了这篇文章.之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方 ...

随机推荐

  1. MySQL存储过程01

    过程:封装了若干条语句,调用时,这些封装体执行 函数:是一个由返回值的’过程‘ 过程是没有返回值的函数 我们把若干条sql封装起来,起个名字---过程 把此过程存储在数据库中------存储过程 存储 ...

  2. svn 没有killall命令的解决方法 -bash: killall: command not found

    debian.ubuntu系统下:   apt-get install psmisc centos 下:   yum install psmisc

  3. 动态规划——背包问题python实现(01背包、完全背包、多重背包)

    目录 01背包问题 完全背包问题 多重背包问题 参考: 背包九讲--哔哩哔哩 背包九讲 01背包问题 01背包问题 描述: 有N件物品和一个容量为V的背包. 第i件物品的体积是vi,价值是wi. 求解 ...

  4. 用IntelliJ IDEA学习Spring--创建一个简单的项目

    这段时间想学习一下Spring,其实之前学过Spring,只是有些忘记了.而且之前学的时候是适用eclipse学习的,现在好像对IntelliJ这个工具使用挺多的,现在就学习一下这个工具的用法,顺便复 ...

  5. CentOS7卸载 OpenJDK 安装Sun的JDK8

    Linux上一般会安装Open JDK,关于OpenJDK和JDK的区别:http://www.cnblogs.com/sxdcgaq8080/p/7487369.html 下面开始安装步骤: --- ...

  6. 删除线性表中所有值为x的元素

    时间复杂度O(n),空间复杂度O(1). 简单的问题两种不同的思路. 代码: #include <stdio.h> #define MAX 100 struct sqlist{ int d ...

  7. java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

    java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver at java.net.URLClassLoader.findClass(URLC ...

  8. pipy配置镜像源

    新电脑第一次使用使用pip命令下载贼慢 我们需要使用国内pipy镜像,参考如下 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ 所以只要设置一下就行了: ...

  9. php数组打乱顺序

    shuffle() PHP shuffle() 函数随机排列数组单元的顺序(将数组打乱).本函数为数组中的单元赋予新的键名,这将删除原有的键名而不仅是重新排序. 语法: bool shuffle ( ...

  10. Nginx+keepalived 高可用双机热备(主从模式)

    环境:centos7.6 最小化安装 主:10.11.1.32 从:10.11.1.33 VIP:10.11.1.130 修改主节点主机名: hostnamectl set-hostname web_ ...