Skip to content

Latest commit

 

History

History
95 lines (82 loc) · 3.89 KB

README.md

File metadata and controls

95 lines (82 loc) · 3.89 KB

多线程爬虫和ElasticSearch搜索引擎

CircleCI license

这是一个简单的爬虫项目, 它从 新浪手机端首页 爬取新闻标题, 存储于 MySql 数据库中, 最终导入 ElasticSearch 搜索引擎, 来实现关于爬取新闻内容的 全文搜索功能。

Requirements

  • Docker : 20.10.2
  • ElasticSearch : 7.10.1 (通过docker安装)
  • MySql : 5.7.33 (通过docker安装)
  • Maven : 3.6.3

部署步骤

  1. 下载本仓库代码
  2. 通过 docker 部署 mysql 和 elasticsearch
docker run -d -v resource/esdata:/usr/share/elasticsearch/data --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.10.1

docker run --name mysql-for-crawler -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -v resources/db/data:/var/lib/mysql -d mysql:5.7.33
  1. 使用 flyway 创建数据库中的表。
mvn flyway:clean
mvn flyway:migrate

目录结构描述

│ .gitignore
├─.circleci
└─src
   ├─main
   │  ├─java
   │  │  └─com
   │  │      └─github
   │  │          └─lzp
   │  │                  Crawler.java
   │  │                  CrawlerDao.java
   │  │                  DataGenerator.java
   │  │                  DataSearchEngine.java
   │  │                  EsDataGenerator.java
   │  │                  JdbcCrawlerDao.java
   │  │                  Main.java
   │  │                  MockDataGenerator.java
   │  │                  MybatisCrawlerDao.java
   │  │                  News.java
   │  └─resources
   │      ├─db
   │      │  ├─migration  // 存放flyway管理数据库的sql脚本
   │      │  │      V1__Create_tables.sql
   │      │  │      V2__Create_index.sql
   │      │  └─mybatis    // 存放mybatis用的映射文件
   │      │          MockMapper.xml
   │      │          mybatis-config.xml
   │      │          MyMapper.xml
   │      └─esdata        // elasticsearch的数据
   │      └─data          // mysql的数据
   └─test
       └─java
           └─com
               └─github
                   └─lzp
                        SmokeTest.java

其中,位于 com.github.lzp 的文件:

CrawlerDao.java         持久层接口,负责与数据库联络的方法
JdbcCrawlerDao.java     使用了JDBC的持久层接口实现类
MybatisCrawlerDao.java  使用了mybatis的持久层接口实现类

DataGenerator.java      数据生成接口,其中有两个实现类的公有方法
MockDataGenerator.java  根据爬取的新闻数据生成假数据, 并插入mysql数据库
EsDataGenerator.java    根据爬取的新闻数据生成假数据, 并插入elasticsearch搜索引擎

Main.java               多线程爬取网络链接的主文件
Crawler.java            爬虫线程的实现类
DataSearchEngine.java   在控制台输入, 搜索elasticsearch上的项目并返回结果
News.java               爬取项目存储的对象--新闻类

使用

  1. 运行Main.java爬取网络数据, 默认会把数据存入 mysql 数据库中(使用 JDBC 存入 h2 数据库)

  2. 运行MockDataGenerator.java, 从mysql数据库中读取数据, 增加假数据以后把取得的数据放回 mysql 数据库。(基于1)

  3. 运行EsDataGenerator.java, 从mysql数据库中读取数据, 增加假数据以后把取得的数据放入 elasticsearch 搜索引擎中。(基于1)

  4. 运行DataSearchEngine.java, 在输入框输入想查询的文本, 返回得到查询结果。(基于3)

  5. 在浏览器输入http://localhost:9200/, 查看elasticsearch相关信息。比如, http://localhost:9200/_counthttp://localhost:9200/_search?q=title:美国 (基于3)