[原创]一种基于Python爬虫和Lucene检索的垂直搜索引擎的实现方法介绍
声明:本文首发在博客园晨星落羽,Shulin_Cao和lvmememe首页,转载请注明出处。
前言
2016.5到2017.5,我们三人(lvmememe,Shulin_Cao,晨星落羽)共同完成了一个本科生科研项目——简体中文版儿童搜索引擎。在做的过程中我们发现,垂直搜索引擎的框架其实都差不多,只不过数据库中存的资源不同而已,一些技术比如网页爬虫、网页提取、信息检索在大多数垂直搜索引擎中是通用的。因此就有了这篇文章,把我们在做项目的过程中用到的技术分享出来,希望能够对感兴趣的朋友有所帮助。本文会详细说明项目中我们已经实现的功能使用的技术,同时也会阐述一些我们希望以后可能会实现的功能。本文期望达到的效果是,一年以后,当我已经忘记现在用到的技术细节,自己再照着这篇文章做,依然可以做出一个同样的搜索引擎。
事实上,本文介绍的框架是一种最基本的简易框架,项目的完成也不代表项目的完善,我们还有许多功能鉴于时间限制和自身水平的限制,暂时没有实现。这些功能在文章中也会提及,只是无法展开细讲。尤其是机器学习、人工智能、数据挖掘等技术,在本文中不会涉及,本文关注更多的是网页爬虫(信息获取)、词条排序(信息检索)、前端后端通讯(信息展示),用到的语言主要包括Python、Java、PHP和前端网页制作的语言。
或许在专业人士看来,本文所讲解的技术也只是几十年前的古老技术,但是我们写这篇博客的目的也不是炫耀自己的技术有多高超,只是想分享一下自己的成果。希望大牛们谅解我们作为低年级本科生水平有限,对于文章的错误,欢迎批评指正,如果有好的想法,也欢迎多多交流!
项目的演示网址:http://www.kidsearch.cn/kidsearch/
目录
1. 垂直搜索引擎的框架介绍
2. 通过Python实现结构化信息获取
2.1 爬虫需要的环境
2.2 基于宽度优先搜索的网页爬虫
2.3 通用的网页信息结构化信息提取的方法
2.4 文章类网页提取的方法
...
3. 通过Lucene对结构化信息进行索引和检索
3.1 Lucene的安装与配置
3.2 Lucene基本检索功能的测试
3.3 把结构化信息加入索引并提供检索服务
3.4 站内检索等待条件的检索
...
4. 通过socket通讯提供网页检索服务
5. 通过MySQL实现用户管理和搜索历史记录
6. 加入元搜索的功能作为信息检索的补充
7. 敏感词和停用词过滤的实现
7.1 Lucene检索的敏感词和停用词过滤
7.2 前端检索的敏感词过滤(针对元搜索)
(鉴于篇幅较长,每日24:00之前更新一次)
[原创]一种基于Python爬虫和Lucene检索的垂直搜索引擎的实现方法介绍的更多相关文章
- 基于python爬虫的github-exploitdb漏洞库监控与下载
基于python爬虫的github-exploitdb漏洞库监控与下载 offensive.py(爬取项目历史更新内容) #!/usr/bin/env python # -*- coding:utf- ...
- [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...
- python爬虫工程师各个阶段需要掌握的技能和知识介绍
本文主要介绍,想做一个python爬虫工程师,或者也可以说是,如何从零开始,从初级到高级,一步一步,需要掌握哪些知识和技能. 初级爬虫工程师: Web前端的知识:HTML, CSS, JavaScri ...
- 基于Python爬虫采集天气网实时信息
相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10- ...
- 【原创】编写多线程Python爬虫来过滤八戒网上的发布任务
目标: 以特定语言技术为关键字,爬取八戒网中网站设计开发栏目下发布的任务相关信息 需求: 用户通过设置自己感兴趣的关键字或正则表达式,来过滤信息. 我自己选择的是通过特定语言技术作为关键字,php.j ...
- 一种基于python的人脸识别开源系统
今天在搜索人脸识别的文章时,无意中搜到一个比较开源代码,介绍说是这个系统人脸的识别率 是比较高的,可以达到:99.38%.这么高的识别率,着实把我吓了一跳.抱着实事求是的态度.个人 就做了一些验证和研 ...
- [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)
最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...
- 基于python的爬虫项目
一.项目简介 1.1 项目博客地址 https://www.cnblogs.com/xsfa/p/12083913.html 1.2 项目完成的功能与特色 爬虫和拥有三个可视化数据分析 1.3 项目采 ...
- FocusBI: 使用Python爬虫为BI准备数据源(原创)
关注微信公众号:FocusBI 查看更多文章:加QQ群:808774277 获取学习资料和一起探讨问题. <商业智能教程>pdf下载地址 链接:https://pan.baidu.com/ ...
随机推荐
- 10分钟精通SharePoint - SharePoint发展历程
SharePoint 2001: SharePoint Team Service(STS) SharePoint Portal Server(SPS) SharePoint 2003: Windows ...
- github多用户git push错误remote: Permission to user1/z.git denied to user2
背景:同一台电脑的public key同时添加到了github的两个账户,导致user1的仓库没法正常提交. 解决办法:为两个账户分别配置ssh key,配置~/.ssh/config文件(windo ...
- [译]Selenium Python文档:八、附录:FAQ常见问题
另外一个FAQ:https://github.com/SeleniumHQ/selenium/wiki/Frequently-Asked-Questions 8.1.怎样使用ChromeDriver ...
- 关于连接数据库的T-SQL语句中的一种小技巧
(编程生活中,我们经常会用到数据库.然后在通过T-SQL语句来对数据库进行操作的时候,遇到很多麻烦.话说昨天我就被困扰了一天.明明这个T-sql插数据的语句放在数据库运行的时候没有问题,到了java代 ...
- Butter Knife使用详解
Butter Knife Github地址: https://github.com/JakeWharton/butterknife 官方说明给出的解释是 Bind Android views and ...
- 1、初识Activity
Activity是Android的基本组成部分,是人机交互程序入口:一个Android项目由多个Activity组成,所有的显示组件必须放在Activity上才能进行显示. (1)Android项目工 ...
- WebApi client 的面向切面编程
.Net的面向切面编程 .Net的服务端应用AOP很常见,在Asp.net MVC与Asp.net WebApi等新框架里到处都有AOP的影子,我们可以把一个服务方法“切”为很多面,日志面.验证面.请 ...
- 玩转 SSH(六):SpringMVC + MyBatis 架构搭建(注解版)
一.创建 SSMVCAnnoDemo 项目 点击菜单,选择“File -> New Project” 创建新项目.选择使用 archetype 中的 maven-webapp 模版创建. 输入对 ...
- Java 静态代理与动态代理
代理模式 设想你的项目依赖第三方,但是你需要对其接口做一些数据检验.性能数据记录.异常处理等,合适的方法就是使用设计模式里的代理模式. 代理模式是常用的java设计模式,代理类与委托类有同样的接口,代 ...
- HTML5新特性-多线程(Worker SharedWorker)
There is no doubt that JavaScript是没有多线程之说的,他只能一件事一件事的做,做完一件事再做下一件事,假如你的js要花一段比较长的时间做一件事的话,那么浏览器将会卡顿一 ...