美文网首页Java 之旅
项目实战 - 多线程网络爬虫与Elasticsearch新闻搜索

项目实战 - 多线程网络爬虫与Elasticsearch新闻搜索

作者: 晓风残月1994 | 来源:发表于2019-11-25 00:24 被阅读0次

    用久了简书,就发现过于简单了,无法全文检索,文章也没有目录导航,但是有很多鸡汤。

    本文语雀对应地址


    用 Java 编写一个多线程爬虫,完成 HTTP 请求、模拟登录、Cookie 保存、HTML 解析的工作。在获得数据之后,会将它存入数据库中,并使用 Flyway 从 H2 迁移到 MySQL。当数据增长到一定规模之后,再使用 Elasticsearch 处理和分析数据,并完成一个简单的搜索引擎。

    涉及技术:Java/HTTP/JSON/HTML/Cookie/jsoup/IDEA/Flyway/MySQL/Elasticsearch

    GitHub 项目地址

    1. 从零开始做一个项目的原则

    待完善...

    2. 初始化项目与项目设计流程

    GitHub 上开一个新仓库,可以勾选预设的 Java .gitignore 配置、开源协议及 README.md。

    初始化:

    • mvn archetype
    • IDEA -new
    • 借鉴

    3. Maven 生命周期与使用

    官方文档地址

    3.1 Build Lifecycle 基础

    Maven 基于构建生命周期这一核心概念,有三个内置的 build lifecycles:default,clean 和 site。

    build lifecycle 由 不同的 build phase 组成,一个 build phase 对应着 build lifecycle 的一个阶段, 其会依次执行。

    build phase 由不同的 plugin goal 组成,通过声明 plugin goal 与 build phase 的绑定来具体的实现在生命周期执行中一些特定任务。

    一个插件目标可以绑定到 0 或多个构建阶段上,如果不绑定到任何构建阶段上,也可以在生命周期之外单独调用执行;如果绑定到多个构建阶段上,那该插件目标会分别在这些阶段中被执行。
    更进一步,一个构建阶段可以和 0 或多个插件目标相绑定,如果没和任何插件目标相绑定,则该构建阶段将不会被执行,但如果和多个目标相绑定,则会执行所有这些目标。
    具体执行顺序的例子如下:

    mvn clean dependency:copy-dependencies package
    

    cleanpackage 参数是构建阶段,而 dependency:copy-dependenciesdependency 插件的一个目标。
    所以运行时的顺序是:
    先执行 clean lifecycle 的 cleanclean 之前的阶段,然后执行 dependency:copy-dependencies ,最后执行 default lifecycle 的 packagepackage 之前的阶段。

    以带有连字符单词命名( pre-*post-*process-* )的构建阶段通常并不直接从命令行中调用,而是在构建过程中内部调用,用于生成对外部来说没什么可用性的中间结果。

    3.2 使用

    在内建的生命周期中,有些构建阶段会和某些内置插件目标进行默认的绑定,具体有哪些绑定,取决于 <packaging> 值(默认 jar )。

    所以使用方法一是设置 <packaging> 值,触发一些构建阶段的默认插件及其默认绑定。

    二是在 pom.xml 文件中进行插件配置,一个插件可能会有多个目标,可以分别指定目标和想要绑定的阶段。

    4. 使用 H2 数据库实现数据存储与断点续传

    4.1 数据库表设计

    LINKS_TO_BE_PROCESSED
    link
    
    LINKS_ALREADY_PROCESSED
    link
    
    NEWS
    id
    title
    content
    url
    created_at
    updated_at
    

    5. 使用 Flyway 数据库自动化迁移工具(v0.1)

    数据库解构的版本管理工具,实现新建和数据迁移自动化。
    照着官网引入 maven,并且安装约定的目录结构和文件命名写好 SQL 语句:

    image.png

    最后,使用了 ES 的 Search API 写一个简单的命令行搜索引擎:

    image.png

    GitHub 项目地址

    相关文章

      网友评论

        本文标题:项目实战 - 多线程网络爬虫与Elasticsearch新闻搜索

        本文链接:https://www.haomeiwen.com/subject/agorwctx.html