[原创]一种基于Python爬虫和Lucene检索的垂直搜索引擎的实现方法介绍

声明:本文首发在博客园晨星落羽Shulin_Caolvmememe首页,转载请注明出处。

 

前言

  2016.5到2017.5,我们三人(lvmememeShulin_Cao晨星落羽)共同完成了一个本科生科研项目——简体中文版儿童搜索引擎。在做的过程中我们发现,搜索引擎的框架其实都差不多,一些技术比如网页爬虫、网页提取、信息检索在大多数垂直搜索引擎中是通用的,只不过数据库中存的资源不同而已。比如把全网资源都包罗进来,就成了百度,把购物信息包罗进来,就成了淘宝。因此就有了这篇文章,把我们在做项目的过程中用到的技术分享出来,希望能够对搜索引擎感兴趣的朋友有所帮助。本文会详细说明项目中我们已经实现的功能使用的技术,同时也会阐述一些我们希望以后可能会实现的功能。本文期望达到的效果是,一年以后,当我已经忘记现在用到的技术细节,自己再照着这篇文章做,依然可以做出一个同样的搜索引擎。

  事实上,本文介绍的框架是一种最基本的简易框架,项目的完成也不代表项目的完善,我们还有许多功能鉴于时间限制和自身水平的限制,暂时没有实现。这些功能在文章中也会提及,只是无法展开细讲。尤其是机器学习、人工智能、数据挖掘等技术,在本文中不会涉及,本文关注更多的是网页爬虫(信息获取)、词条排序(信息检索)、前端后端通讯(信息展示),用到的语言主要包括Python、Java、PHP和前端网页制作的语言。

   目前,项目已经发表了五篇论文,包括三篇中文期刊和两篇国际会议。

    1. 儿童搜索引擎的现状与分析

    2. 面向搜索引擎的结构化信息生成系统的设计与实现

    3. 基于 Lucene 与 Socket 通信的中文搜索引擎的设计与实现

    4. An Algorithm to Extract and Judge the Main Text Based on the Law of Total Probability

    5. KidSE: A Search Engine Designed for Children which Supports Simplified Chinese

  其中,第一篇论文目前已经发表,后面四篇已经收到录用通知等待发表。本文的很多想法也都是对论文中的内容进行整合。后续发表后会对论文链接进行更新。

  或许在专业人士看来,本文所讲解的技术也只是几十年前的古老技术,但是我们写这篇博客的目的也不是炫耀自己的技术有多高超,只是想分享一下自己的成果。希望大牛们谅解我们作为低年级本科生水平有限,对于文章的错误,欢迎批评指正,如果有好的想法,也欢迎多多交流!

  项目github:https://github.com/1049451037/kidsearch

  事实上,这篇博客的样例工程并不是儿童搜索引擎,按照这篇文章做完之后,会做成一个文章搜索引擎,它通过全网自动判别文章类网页,并提取内容,自动入库,天下文章,皆为我有。是不是很期待?那我们开始吧!

 

目录

  1. 垂直搜索引擎的介绍

    1.1 垂直搜索引擎的概念

    1.2 垂直搜索引擎的框架设计

  2. 通过Python实现结构化信息获取

    2.1 Python3.5安装以及爬虫需要的环境配置

    2.2 基于宽度优先搜索的网页爬虫演示

    2.3 基于宽度优先搜索的网页爬虫原理讲解

    2.4 通用的网页信息结构化信息提取的方法

    2.5 文章类网页正文提取程序演示

    2.6 网页分类:文章类/非文章类

    2.7 文章类网页提取和判断的原理讲解

    2.8 分布式爬虫的设计与实现

    *2.9 针对特定需求的其他爬虫方法(拓展阅读)

      2.9.1 使用selenium抓取动态网页

      2.9.2 使用Fiddler抓取手机app数据

  3. 通过Lucene对结构化信息进行索引和检索

    3.1 Java以及Lucene的安装与配置

    3.2 Lucene实战:一个简单的小程序

    3.3 Lucene检索原理

    3.4 针对中文检索的问题

    3.5 实例讲解Lucene索引的结构设计

    3.6 Lucene基本检索+关键词高亮+分页

    3.7 高级检索方式(一)

    3.8 高级检索方式(二)

    3.9 词条的更新、添加和删除

    3.10 根据用户反馈动态排序

  4. 服务器的搭建和使用(Windows Server)

    4.1 php+mysql+apache

    4.2 域名

    4.3 https

  5. 通过socket通讯提供网页检索服务

    5.1 通过socket把Lucene检索服务变为网页检索服务

    5.2 通过socket发送结构化信息

    5.3 通过设计socket通讯模型实现多线程并发访问模式

    5.4 通过socket连接Python爬虫和Lucene实现实时索引和更新

  6. 加入元搜索的功能作为信息检索的补充

    6.1 简单跳转版本

    6.2 实时抓取版本

      6.2.1 根据查询实时抓取网页内容

      6.2.2 将网页信息结构化显示给用户

  7. 通过MySQL实现的功能

    7.1 用户管理

    7.2 搜索历史记录

    7.3 用户留言

  8. 敏感词和停用词过滤的实现

    8.1 Lucene检索的敏感词和停用词过滤

    8.2 前端检索的敏感词过滤的Python实现(针对元搜索)多线程并发

  9.一些小的功能

    9.1 根据搜索历史进行推荐

    9.2 给输入文本框加入语音识别

  10. 文章类搜索引擎demo设计与实现

  11. 网站防止恶意攻击的方法

  12. 未来的研究方向

    12.1 知识图谱、数据挖掘

    12.2 机器学习、自然语言处理

 

更新日志

2017.5.2 21:09 完成目录框架

2017.5.2 21:30 完成1.1节的更新

2017.5.2 23:43 完成1.2节的更新

2017.5.3 9:48 完成2.1节的更新

2017.5.4 0:42 完成3.1节更新

2017.5.5 0:02 完成2.2节更新

2017.5.5 0:20 完成3.3节更新

2017.5.5 12:17 完成3.2节更新

2017.5.5 21:38 完成2.3节更新

2017.5.7 1:27 完成2.5节更新

2017.5.7 1:40 完成3.4节更新

2017.5.8 21:03 完成2.6节更新

2017.5.9 0:37 完成3.5节更新

2017.5.9 18:05 完成2.4节更新

2017.5.9 22:46 完成3.6节更新

2017.5.10 18:58 完成2.7节更新

2017.5.11 14:32 更新目录

2017.5.11 14:43 完成2.9节更新

2017.5.11 23:51 完成3.7节更新

2017.5.12 9:50 完成3.8节更新

2017.5.12 23:34 完成8.2节更新

2017.5.21 13:30 完成5.4节更新

 

posted @ 2017-05-02 19:40  lvmememe  阅读(5768)  评论(6编辑  收藏  举报