分布式爬虫和搜索的设计与实现

简介: 爬取网站,采用流程节点,用来处理摘要计算、关键字计算、相似度计算、热度计算。数据经过流程计算以后,落库,建立倒排索引。搜索根据关键词到倒排索引表可以快速搜索。 实现步骤 1.基础工作:收集一些网址,作为爬虫的入口。种子url表结构: { “_id” : ObjectId(“c54c4352310b3c”), “urlId” : “io563784uiodf7e96bb9i

爬取网站,采用流程节点,用来处理摘要计算、关键字计算、相似度计算、热度计算。数据经过流程计算以后,落库,建立倒排索引。搜索根据关键词到倒排索引表可以快速搜索。

实现步骤
1.基础工作:收集一些网址,作为爬虫的入口。种子url表结构:

{

“_id” : ObjectId(“c54c4352310b3c”),

“urlId” : “io563784uiodf7e96bb9ij”,

“url” : “http://bigcat.iteye.com/blog/33”,

“deleteFlag” : “1”,

“createTime” : “20170505120012”,

“rootUrl” : “http://bigcat2013.iteye.com”,

“deep” : 1.0

} urlId为随机生成,url为种子url,deleteFlag:0表示未删除1为已删除 rootUrl:根网站地址 deep:访问深度,深度越深表示层级越低。

2.基础工作:整理行业类别,并设置类别的关键字(为后续网页行业归类做相似度计算依据)。行业类别表结构:

{

“_id” : ObjectId(“5a9ec8b0552310b3d”),

“urlId” : “io5636fbauiodf7e96bb9ij”,

“topicCode” : “IT”

} urlId为行业代表url topicCode:表示行业类别编码

3.爬取网页:jsoup工具分析、识别、审核网页的内容(例如:是否为广告、内容过短),若内容审核通过,则落库。流程的第一个节点完成。流程表结构:

{

“_id” : ObjectId(“5aa00c0cd0c5e5df”),

“flowId” : “8315006ae8c03b1b648c”,

“urlId” : “d162bab5ebc467bb1f4”,

“nodeCode” : “UrlDataExtract”,

“startFlag” : “1”,

“endFlag” : “1”,

“seqNo” : 1.0

} flowId:流程ID urlId:网页ID nodeCode:节点编码 startFlag:流程开始标记 1:已开始 0:未开始 endFlag:结束标记 0:未结束 1:已结束 seqNo:流程节点序号(升序编号)

网页数据表结构:

{

“_id” : ObjectId(“5aa2adbc5c6b736”),

“urlId” : “9bc15a1c0e54c1f03c27”,

“url” : “www.runoob.com/angularjs-http.html”,

“txt” : “AngularJS Http | 菜鸟教程 菜鸟教程 – 学的不仅是技术,更是梦想! 首页 HTMLCSS JavaScript jQuery 更多……此处省略”,

“title” : “AngularJS Http | 菜鸟教程”,

“hots” : 30.0

} urlId:网页ID url:网页地址 txt:网页摘要(限制500字以内) title:标题名称 hots:表示搜索热度

4.关键词抽取:网页摘要内容生成,关键词提取(Ikanalyzer开源)。关键词存入关键词表。关键词表结构:

{

“_id” : ObjectId(“5aa00c779cc5e88a”),

“urlId” : “d162bab5edbc467bb1f4”,

“keyWord” : “数据库”,

“counts” : 10.0

} urlId:网页ID keyWords:关键词描述 counts:关键词出现次数。数据字典表:

{

“_id” : ObjectId(“5aa00ce99cceec5ec78”),

“wordId” : “9e83bed9f04bcb”,

“word” : “网络”

} wordId:字ID word:字描述

5.倒排索引建立:根据关键词生成倒排索引,将url对应的id存入倒序索引表。相似度表(用于计算行业归类使用):

{

“_id” : ObjectId(“5aa00ce5ec89”),

“urlIdSeed” : “4506d40e0f3163d2”,

“urlId”:werqd09if3c0f39ijnh

“similar” : 30.0

} urlIdSeed:种子urlId urlId:网页ID similar:相似度数值(100分为上限),倒序索引表:

{

“_id” : ObjectId(“5aa00ced0c5ec66”),

“urlId” : “e3a9c8d4d1e6e02”,

“url” : “http://www.cnblogs.com/p/5.html/”,

“wordId” : “fa368b5b5b69e2230c”,

“title” : “Java 网络爬虫获取网页源代”,

“summary” : “过配置文件将该请求转换为网站主页地址index.php”,

“hots” : 30.0

} urlId:网页ID url:网址 wordId:关键词ID title:标题 summary:摘要 hots:热度

功能扩展

1、将爬虫功能集成在jar包里,数据存储采用内存(HashMap),爬虫和数据中心通讯,拉去种子url,爬取加工完成以后,将处理好的结果,推送给数据中心(通讯过程采用非对称加密)。

2、数据中心通过消息队列降低nosql压力。

技术工具

springBoot、mongodb、kafka、dubbo、job。

git后端地址:https://github.com/sijunx/mySpider

git前端地址:https://github.com/sijunx/whatsUp

demo网址:www.dahansoft.com

目录
相关文章
|
4月前
|
分布式计算 Ubuntu Hadoop
百度搜索:蓝易云【Ubuntu搭建全分布式Hadoop】
请注意,以上只是概述,并不包含详细的步骤和指令。搭建全分布式Hadoop是一个复杂的过程,需要对Hadoop的架构和配置有深入的理解,并熟悉Linux系统管理。建议在搭建全分布式Hadoop之前,先学习相关知识并查阅官方文档和教程,以确保正确搭建和配置Hadoop集群。
52 0
|
1月前
|
SQL JSON 大数据
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
这篇文章是Elasticsearch的进阶使用指南,涵盖了Search API的两种检索方式、Query DSL的基本语法和多种查询示例,包括全文检索、短语匹配、多字段匹配、复合查询、结果过滤、聚合操作以及Mapping的概念和操作,还讨论了Elasticsearch 7.x和8.x版本中type概念的变更和数据迁移的方法。
ElasticSearch的简单介绍与使用【进阶检索】 实时搜索 | 分布式搜索 | 全文搜索 | 大数据处理 | 搜索过滤 | 搜索排序
因为一个问题、我新学了一门技术 ElasticSearch 分布式搜索
这篇文章讲述了作者因为一个检索问题而学习了ElasticSearch技术,并分享了排查和解决ElasticSearch检索结果与页面展示不符的过程。
因为一个问题、我新学了一门技术 ElasticSearch 分布式搜索
|
2月前
|
缓存 Devops 微服务
微服务01好处,随着代码越多耦合度越多,升级维护困难,微服务技术栈,异步通信技术,缓存技术,DevOps技术,搜索技术,单体架构,分布式架构将业务功能进行拆分,部署时费劲,集连失败如何解决
微服务01好处,随着代码越多耦合度越多,升级维护困难,微服务技术栈,异步通信技术,缓存技术,DevOps技术,搜索技术,单体架构,分布式架构将业务功能进行拆分,部署时费劲,集连失败如何解决
|
2月前
|
运维 监控 Java
在大数据场景下,Elasticsearch作为分布式搜索与分析引擎,因其扩展性和易用性成为全文检索首选。
【7月更文挑战第1天】在大数据场景下,Elasticsearch作为分布式搜索与分析引擎,因其扩展性和易用性成为全文检索首选。本文讲解如何在Java中集成Elasticsearch,包括安装配置、使用RestHighLevelClient连接、创建索引和文档操作,以及全文检索查询。此外,还涉及高级查询、性能优化和故障排查,帮助开发者高效处理非结构化数据。
51 0
|
4月前
|
分布式计算 Hadoop Java
百度搜索:蓝易云【HBase分布式安装配置教程。】
以上是一个简要的HBase分布式安装和配置教程。需要注意的是,HBase的配置和部署涉及更多的细节和参数设置,取决于你的特定环境和需求。建议你参考HBase官方文档或其他可靠资源,以获得更详细和全面的指导。
67 6
|
9月前
|
Web App开发 Docker 容器
百度搜索:蓝易云【用docker搭建selenium grid分布式环境实践】
通过这些步骤,您可以使用Docker搭建Selenium Grid分布式环境,并在多个节点上并行运行Selenium测试。根据实际需求,您还可以进行更高级的配置和扩展,如增加更多的节点、配置浏览器版本等。
59 1
|
存储 索引
ES 分布式搜索的运行机制
ES 分布式搜索的运行机制
44 1
ES 分布式搜索的运行机制
|
11月前
|
前端开发
47分布式电商项目 - 商品关键字搜索
47分布式电商项目 - 商品关键字搜索
34 0
47分布式电商项目 - 商品关键字搜索
|
11月前
|
消息中间件 搜索推荐 索引
57分布式电商项目 - ActiveMQ 实现运营商后台与搜索服务的零耦合(二)
57分布式电商项目 - ActiveMQ 实现运营商后台与搜索服务的零耦合(二)
147 0