最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java爬蟲框架之WebMagic實(shí)戰(zhàn)

 更新時(shí)間:2020年12月01日 10:13:03   作者:挑戰(zhàn)者V  
這篇文章主要介紹了Java爬蟲框架之WebMagic實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、介紹

WebMagic是一個(gè)簡單靈活的Java爬蟲框架。基于WebMagic,你可以快速開發(fā)出一個(gè)高效、易維護(hù)的爬蟲。

二、如何學(xué)習(xí)

1.查看官網(wǎng)

官網(wǎng)地址為:http://webmagic.io/
官網(wǎng)詳細(xì)文檔:http://webmagic.io/docs/zh/

2.跑通hello world示例(具體可以參考官網(wǎng),也可以參考博客)

我下面寫的單元測試案例,可作為Hello World示例。

注意需要導(dǎo)入Maven依賴:

<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>

3.帶著一個(gè)目的

說說我的目的,最近我開發(fā)的博客系統(tǒng),其中有個(gè)導(dǎo)入第三方博客的插件,這個(gè)插件比較簡單就是一個(gè)搜索框,在對應(yīng)的搜索框里面填寫URL,點(diǎn)擊搜索即可導(dǎo)入到自己的博客。

以導(dǎo)入博客園單篇文章為例:

下面是我的源代碼(單篇文章導(dǎo)入,我已經(jīng)將其封裝成一個(gè)工具類):

import cn.hutool.core.date.DateUtil;
import com.blog.springboot.dto.CnBlogModelDTO;
import com.blog.springboot.entity.Posts;
import com.blog.springboot.service.PostsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.ConsolePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Selectable;
import javax.annotation.PostConstruct;


/**
 * 導(dǎo)入博客園文章工具類
 */
@Component
public class WebMagicCnBlogUtils implements PageProcessor {

  @Autowired
  private PostsService postService;


  public static WebMagicCnBlogUtils magicCnBlogUtils;

  @PostConstruct
  public void init() {
    magicCnBlogUtils = this;
    magicCnBlogUtils.postService = this.postService;
  }
  private Site site = Site.me()
      .setDomain("https://www.cnblogs.com/")
      .setSleepTime(1000)
      .setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36");


  @Override
  public void process(Page page) {


    Selectable obj = page.getHtml().xpath("http://div[@class='post']");
    Selectable title = obj.xpath("http://h1[@class='postTitle']//a");
    Selectable content = obj.xpath("http://div[@class='blogpost-body']");
    System.out.println("title:" + title.replace("<[^>]*>", ""));
    System.out.println("content:" + content);
    CnBlogModelDTO blog = new CnBlogModelDTO();
    blog.setTitle(title.toString());
    blog.setContent(content.toString());

    Posts post = new Posts();

    String date = DateUtil.date().toString();
    post.setPostAuthor(1L);
    post.setPostTitle(title.replace("<[^>]*>", "").toString());
    post.setPostContent(content.toString());
    post.setPostExcerpt(content.replace("<[^>]*>", "").toString());
    post.setPostDate(date);
    post.setPostDate(date);
    post.setPostModified(date);
    boolean importPost = magicCnBlogUtils.postService.insert(post);

    if (importPost) {
      System.out.println("success");
    } else {
      System.out.println("fail");
    }


  }

  @Override
  public Site getSite() {
    return site;
  }


  /**
   * 導(dǎo)入單篇博客園文章數(shù)據(jù)
   *
   * @param url
   */
  public static void importSinglePost(String url) {
    Spider.create(new WebMagicCnBlogUtils())
        .addUrl(url)
        .addPipeline(new ConsolePipeline())
        .run();

  }
}

單元測試代碼:

import com.blog.springboot.dto.CnBlogModelDTO;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.ConsolePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Selectable;



public class WebMagicJunitTest implements PageProcessor {
  private Site site = Site.me()
      .setDomain("https://www.cnblogs.com/")
      .setSleepTime(1000)
      .setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36");


  @Override
  public void process(Page page) {


    Selectable obj = page.getHtml().xpath("http://div[@class='post']");
    Selectable title = obj.xpath("http://h1[@class='postTitle']//a");
    Selectable content = obj.xpath("http://div[@class='blogpost-body']");

    System.out.println("title:" + title.replace("<[^>]*>", ""));
    System.out.println("content:" + content);


  }

  @Override
  public Site getSite() {
    return site;
  }


  public static void importSinglePost(String url) {
    Spider.create(new WebMagicJunitTest())
        .addUrl(url)
        .addPipeline(new ConsolePipeline())
        .run();
  }
  public static void main(String[] args) {

    WebMagicJunitTest.importSinglePost("https://www.cnblogs.com/youcong/p/9404007.html");
  }

另外我是怎么知道要爬取哪些數(shù)據(jù)呢?
需求第一,然后通過Chrome或Firefox瀏覽器檢查元素,如圖:

到此這篇關(guān)于Java爬蟲框架之WebMagic實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)Java WebMagic內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • maven中profile動(dòng)態(tài)打包不同環(huán)境配置文件的實(shí)現(xiàn)

    maven中profile動(dòng)態(tài)打包不同環(huán)境配置文件的實(shí)現(xiàn)

    開發(fā)項(xiàng)目時(shí)會遇到這個(gè)問題:開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境的配置文件不同, 打包時(shí)經(jīng)常要手動(dòng)更改配置文件,本文就來介紹一下maven中profile動(dòng)態(tài)打包不同環(huán)境配置文件的實(shí)現(xiàn),感興趣的可以了解一下
    2023-10-10
  • 超全MyBatis動(dòng)態(tài)代理詳解(絕對干貨)

    超全MyBatis動(dòng)態(tài)代理詳解(絕對干貨)

    這篇文章主要介紹了超全MyBatis動(dòng)態(tài)代理詳解(絕對干貨),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • SSH框架網(wǎng)上商城項(xiàng)目第14戰(zhàn)之商城首頁UI的設(shè)計(jì)

    SSH框架網(wǎng)上商城項(xiàng)目第14戰(zhàn)之商城首頁UI的設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項(xiàng)目第14戰(zhàn)之商城首頁UI的設(shè)計(jì),感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java在高并發(fā)場景下實(shí)現(xiàn)點(diǎn)贊計(jì)數(shù)器

    Java在高并發(fā)場景下實(shí)現(xiàn)點(diǎn)贊計(jì)數(shù)器

    點(diǎn)贊計(jì)數(shù)器的本質(zhì)就是對某個(gè)變量在高并發(fā)情況下的修改,這篇文章主要為大家介紹了Java實(shí)現(xiàn)點(diǎn)贊計(jì)數(shù)器的示例代碼,感興趣的小伙伴可以了解一下
    2023-06-06
  • Java 比較字符串實(shí)例詳解

    Java 比較字符串實(shí)例詳解

    這篇文章主要介紹了 Java 比較字符串實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • JVM GC 垃圾收集梳理總結(jié)

    JVM GC 垃圾收集梳理總結(jié)

    這篇文章主要介紹了JVM GC 垃圾收集梳理總結(jié),GC是一種自動(dòng)的存儲管理機(jī)制。當(dāng)一些被占用的內(nèi)存不再需要時(shí),就應(yīng)該予以釋放,這種存儲資源管理,稱為垃圾回收
    2022-07-07
  • 關(guān)于Java的對象序列化流和反序列化流詳細(xì)解讀

    關(guān)于Java的對象序列化流和反序列化流詳細(xì)解讀

    這篇文章主要介紹了關(guān)于Java的對象序列化流和反序列化流,對象序列化:就是將對象保存到磁盤中,或者在網(wǎng)絡(luò)中傳輸對象,反之,自己序列還可以從文件中讀取回來,重構(gòu)對象,對它進(jìn)行反序列化,需要的朋友可以參考下
    2023-05-05
  • Java對象的序列化與反序列化詳解

    Java對象的序列化與反序列化詳解

    這篇文章主要為大家詳細(xì)介紹了Java對象的序列化與反序列化的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Redis中高并發(fā)讀寫性能的深度解析與優(yōu)化

    Redis中高并發(fā)讀寫性能的深度解析與優(yōu)化

    Redis 作為一款高性能的內(nèi)存數(shù)據(jù)庫,廣泛應(yīng)用于緩存、消息隊(duì)列、實(shí)時(shí)統(tǒng)計(jì)等場景,本文將深入探討 Redis 的讀寫并發(fā)能力,感興趣的小伙伴可以了解下
    2025-03-03
  • 解讀查看zookeeper事務(wù)日志的正確姿勢

    解讀查看zookeeper事務(wù)日志的正確姿勢

    這篇文章主要介紹了解讀查看zookeeper事務(wù)日志的正確姿勢。具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論

兴国县| 白水县| 涞水县| 扎兰屯市| 彭水| 乳山市| 张北县| 本溪市| 涟源市| 江陵县| 兴山县| 海门市| 山西省| 花莲县| 八宿县| 临夏县| 镇坪县| 永宁县| 乐至县| 泗阳县| 株洲县| 沂南县| 柳林县| 岚皋县| 上思县| 永和县| 彭州市| 莲花县| 寿阳县| 福贡县| 辉南县| 大新县| 海伦市| 岑溪市| 宁城县| 嘉祥县| 互助| 永顺县| 通州区| 汶川县| 丰原市|