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. webapi之owin的oauth2.0密码模式_01概述

    一般在webapi接口中,为了防止接口被随意调用,都会验证用户身份. 然而不能每次调用接口都需要用户输入用户名密码来验证,这时就需要授权颁发令牌了,持有令牌就可以访问接口,接口也能验证令牌身份. 简单 ...

  2. php将原数组倒序array_reverse()

    1.数组倒序排列 $arr = array(1,2,3); $arr = array_reverse($arr); print_r($arr);

  3. Python +appium 封装desired_caps模块

    使用python+appium做android的自动化测试时,首先需要启动appium服务,然后连接上手机,配置如下: desired_caps = {"platformName" ...

  4. appium+python自动化63-使用Uiautomator2报错问题解决

    前言 appium desktop V1.7.1版本使用命令行版本启动appium后,使用Uiautomator2定位toast信息报错:appium-uiautomator2-server-v0.3 ...

  5. MP4文件批量转码成MP3

    需求背景:最近为了学python爬虫,在论坛里找了不少视频教程,非常棒.但有时看视频不方便,就想着能否把视频批量转码成音频,这样在乘坐地铁公交的时候也能学习了. 解决路径:有了需求,我首先在论坛里搜了 ...

  6. 互联网UV,PU,TopN统计

    1. UV.PV.TopN概念 1.1 UV(unique visitor) 即独立访客数 指访问某个站点或点击某个网页的不同IP地址的人数.在同一天内,UV只记录第一次进入网站的具有独立IP的访问者 ...

  7. GitLab CI runner can't connect to tcp://localhost:2375 in kubernetes

    报错的.gitlab-ci.yml配置如下 image: docker:latest services: - docker:dind variables: DOCKER_HOST: tcp://loc ...

  8. Python中实现count(distinct )

    假设一个表有6个字段c1,c2,c3,c4,c5,c6,有如下的sql语句: select c1,count(distinct(c6)) from tbl where c3>1 group by ...

  9. python变量选中后高亮显示

    file>settings>editor>color scheme>general>code>identifier under caret>backgroun ...

  10. MySQL server has gone away && Lost connection to MySQL server during query

    问题一.MySQL server has gone away ##### peewee from peewee import * from peewee import __exception_wrap ...