详细可参考

(1)书箱:《这就是搜索引擎》《自己动手写网络爬虫》《解密搜索引擎打桩实践》

(2)【搜索引擎基础知识1】搜索引擎的技术架构

(3)【搜索引擎基础知识2】网络爬虫的介绍

(一)搜索引擎的开发一般可分为以下三大部分

1、数据采集层:一般使用爬虫获取互联网的数据,重要的开源项目有Heritrxi

2、数据分析处理层:将从互联网上获取到的数据进行提取归类、分词、语义分析得出索引得内容,等待用户查询使用,重要的开源项目有Lucene

3、视图层:也用户的交互界面,如一个网站的首页

其基本架构可参考下图:

(二)网络爬虫的简介

详细请参见  【搜索引擎基础知识2】网络爬虫

下面例子将简单实现宽度优先搜索策略。

广度优先搜索策略
      宽度优先遍历策略的基本思路是,将新下载网页中发现的链接直接插入待抓取URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。该算法的设计和实现相对简单。在目前为覆盖尽可能多的网页, 一般使用广度优先搜索方法。也有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始URL在一定链接距离内的网页具有主题相关性的概率很大。另外一种方法是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。这些方法的缺点在于,随着抓取网页的增多,大量的无关网页将被下载并过滤,算法的效率将变低。

还是以上面的图为例,抓取过程如下:

广度搜索过程:

首先访问页面v1 和v1 的邻接点v2 和v3,然后依次访问v2 的邻接点v4 和v5 及v3 的邻接点v6 和v7,最后访问v4 的邻接点v8。由于这些顶点的邻接点均已被访问,并且图中所有顶点都被访问,由些完成了图的遍历。得到的顶点访问序列为:

v1→v2 →v3 →v4→ v5→ v6→ v7 →v8

和深度优先搜索类似,在遍历的过程中也需要一个访问标志数组。并且,为了顺次访问路径长度为2、3、…的顶点,需附设队列以存储已被访问的路径长度为1、2、… 的顶点。

(1)采用广度优先的原因:
重要的网页往往离种子站点距离较近;万维网的深度没有我们想象的那么深,但却出乎意料地宽(中文万维网直径长度只有17,即任意两个网页之间点击17次后便可以访问到);
宽度优先有利于多爬虫合作抓取;
(2)广度优先的存在不利结果:
容易导致爬虫陷入死循环,不该抓取的反复抓取;
应该抓取的没有机会抓取;
(3) 解决以上两个缺点的方法是深度抓取策略(Depth-First Trsversal)和不重复抓取策略 
(4)为了防止爬虫无限制地宽度优先抓取,必须在某个深度上进行限制,达到这个深度后停止抓取,这个深度就是万维网的直径长度。当最大深度上停止抓取时,那些深度过大的未抓取网页,总是期望可以从其他种子站点更加经济地到达。限制抓取深度会破坏死循环的条件,即使出现循环也会在有限次后停止。 
(5)评价:   宽度(广度)优先,兼顾深度的遍历策略,可以有效保证抓取过程中的封闭性,即在抓取过程(遍历路径)中总是抓取相同域名下的网页,而很少出现其他域名下的网页。

【搜索引擎Jediael开发笔记1】搜索引擎初步介绍及网络爬虫相关推荐

  1. 【搜索引擎Jediael开发笔记】v0.1完整代码

    详细代码请见 E:\Project\[重要]归档代码\SearchEngine归档代码 或 https://code.csdn.net/jediael_lu/jediael/tree/10991c83 ...

  2. 【搜索引擎Jediael开发笔记2】使用HttpClient下载网页至本地文件

    本文使用HttpClient依据url进行网页下载.当中 (1)HttpClient的相关知识请參见 HttpClient基础教程 (2) package org.ljh.search.downloa ...

  3. 【搜索引擎Jediael开发笔记3】使用HtmlParser提取网页中的链接

    关于HtmpParser的基本内容请见 HtmlParser基础教程 本文示例用于提取HTML文件中的链接 package org.ljh.search.html;import java.util.H ...

  4. 网络爬虫课程介绍及网络爬虫是什么

    1.1.1知识概述 介绍网络爬虫的课时安排,以及简单介绍当前课程在大数据课程中的重要性. 1.1.2视频详情 1.1.3总结与补充 无 1.1.4课堂提问与练习 无 1.1.5习题答案 无 1.1 网 ...

  5. 【笔记】5、初学python3网络爬虫——正则表达式的基本使用

    python3网络爬虫--正则表达式的基本使用 学习指引:视频教程<python3网络爬虫实战> 为了避免学习后短时间内遗忘,让自己随时可以查阅前方自己学过的知识,特意注册csdn博客,方 ...

  6. 【搜索引擎Jediael开发4】V0.01完整代码

    截止目前,已完成如下功能: 1.指定某个地址,使用HttpClient下载该网页至本地文件 2.使用HtmlParser解释第1步下载的网页,抽取其中包含的链接信息 3.下载第2步的所有链接指向的网页 ...

  7. Kinect开发笔记之一Kinect详细介绍

      毕业设计的课题我选择了结合Kinect和Unity3D开发体感游戏,这是我十分感兴趣的一个课题,所以做好当然责无旁贷.准备再写一系列Kinect的学习笔记,记录自己毕设一步一个脚印的历程.     ...

  8. PythonNet开发笔记一、PythonNet介绍及安装

    介绍 Python.NET ( pythonnet) 是一个包,它使 Python 程序员可以与 Windows 上的 .NET 4.0+ 公共语言运行时 (CLR) 和 Linux 和 OSX 上的 ...

  9. 流媒体服务器开发笔记(2)--RTCP协议介绍

    http://blog.sina.com.cn/s/blog_53061af00100o2no.html ----------------------------------------------- ...

最新文章

  1. 我为什么辞去了热爱的 AI 工作?
  2. 基于svg.js实现可编辑的图像
  3. Windows下nginx-http-flv-module服务部署
  4. 初次使用Eclipse,坑一二
  5. Android App Bundle:动态功能模块
  6. 一些比较有用的SQL操作,2011最新整理
  7. pthread_mutex_init函数《代码》
  8. python读取数据库数据、并保存为docx_Python - 爬取博客园某一目录下的随笔 - 保存为docx...
  9. 获取上周_北美木材价格上周趋于稳定
  10. 随机数是骗人的,.Net、Java、C为我作证 - 杨中科 - 博客园
  11. Springboot使用FastJson后,接口返回中文乱码的问题解决。
  12. MFC编程入门之二十(常用控件:静态文本框)
  13. EXCEL复制可见单元格
  14. 计算机语言 指令,计算机BASIC语言    指令
  15. 贪心法(作业调度问题)
  16. 简单描述数字签名:私钥签名;公钥验签。
  17. 软件测试工程师面经2022-1-22
  18. 阿里云服务搭建微信小程序开发环境
  19. 【Android】应用拍摄视频功能
  20. 3-4课:各种花式编程语言大放送

热门文章

  1. 计算机系统的主存主要是由()构成的。【最全!最详细分析!】
  2. mysql语法中的LIMIT的用法
  3. STM32启动文件代码解析
  4. VMware下安装的Mac OS X如何修改显示分辨率
  5. 全程图解交换机和路由器的应用
  6. 计算机mooc操作测试视频,计算机基础课MOOC视频的制作方法.doc
  7. 交通安全与智能控制专业学计算机吗,交通安全与智能控制专业排名好不好_主要课程及就业前景分析...
  8. 国外学校css profile,CSS Print Profile
  9. android布局DSL,android – 使用自定义Anko布局DSL解除警报对话框
  10. 计算机软件系统包括应用软件和什么,计算机软件系统包括什么