搜索引擎 订阅
所谓搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术。搜索引擎依托于多种技术,如网络爬虫技术、检索排序技术、网页处理技术、大数据处理技术、自然语言处理技术等,为信息检索用户提供快速、高相关性的信息服务。搜索引擎技术的核心模块一般包括爬虫、索引、检索和排序等,同时可添加其他一系列辅助模块,以为用户创造更好的网络使用环境。 [1] 展开全文
所谓搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术。搜索引擎依托于多种技术,如网络爬虫技术、检索排序技术、网页处理技术、大数据处理技术、自然语言处理技术等,为信息检索用户提供快速、高相关性的信息服务。搜索引擎技术的核心模块一般包括爬虫、索引、检索和排序等,同时可添加其他一系列辅助模块,以为用户创造更好的网络使用环境。 [1]
信息
关键技术
网络爬虫、大数据处理、数据挖掘等
作    用
信息获取
分    类
全文索引、目录索引等
中文名
搜索引擎
代    表
百度、谷歌等
外文名
search engine
搜索引擎定义
搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上采集信息,在对信息进行组织和处理后,为用户提供检索服务,将检索的相关信息展示给用户的系统。搜索引擎是工作于互联网上的一门检索技术,它旨在提高人们获取搜集信息的速度,为人们提供更好的网络使用环境。从功能和原理上搜索引擎大致被分为全文搜索引擎、元搜索引擎、垂直搜索引擎和目录搜索引擎等四大类。 [2]  搜索引擎发展到今天,基础架构和算法在技术上都已经基本成型和成熟。搜索引擎已经发展成为根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。 [3] 
收起全文
精华内容
下载资源
问答
  • 搜索引擎

    万次阅读 2017-09-06 12:00:45
    Baiduspider常见问题解答什么是BaiduspiderBaiduspider是百度搜索引擎的一个自动程序,它的作用是访问互联网上的网页,建立索引数据库,使用户能在百度搜索引擎中搜索到您网站上的网页。Baiduspider的user-agent是...

    Baiduspider常见问题解答

    什么是Baiduspider

    Baiduspider是百度搜索引擎的一个自动程序,它的作用是访问互联网上的网页,建立索引数据库,使用户能在百度搜索引擎中搜索到您网站上的网页。

    Baiduspider的user-agent是什么?

    百度各个产品使用不同的user-agent:

    产品名称 对应user-agent
    网页搜索 Baiduspider
    移动搜索 Baiduspider
    图片搜索 Baiduspider-image
    视频搜索 Baiduspider-video
    新闻搜索 Baiduspider-news
    百度搜藏 Baiduspider-favo
    百度联盟 Baiduspider-cpro
    商务搜索 Baiduspider-ads

    如何区分PC与移动网页搜索的UA

    PC搜索完整UA:

    Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)

    移动搜索完整UA:

    Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)

    pc ua:通过关键词Baiduspider/2.0来确定是pc ua

    移动ua:通过关键词android和mobile确定是来自移动端抓取访问,Baiduspider/2.0 确定为百度爬虫。

    Baiduspider对一个网站服务器造成的访问压力如何?

    为了达到对目标资源较好的检索效果,Baiduspider需要对您的网站保持一定量的抓取。我们尽量不给网站带来不合理的负担,并会根据服务器承受能力,网站质量,网站更新等综合因素来进行调整。如果您觉得baiduspider的访问行为有任何不合理的情况,您可以反馈至反馈中心。

    为什么Baiduspider不停的抓取我的网站?

    对于您网站上新产生的或者持续更新的页面,Baiduspider会持续抓取。此外,您也可以检查网站访问日志中Baiduspider的访问是否正常,以防止有人恶意冒充Baiduspider来频繁抓取您的网站。 如果您发现Baiduspider非正常抓取您的网站,请通过投诉平台反馈给我们,并请尽量给出Baiduspider对贵站的访问日志,以便于我们跟踪处理。

    如何判断是否冒充Baiduspider的抓取?

    建议您使用DNS反查方式来确定抓取来源的ip是否属于百度,根据平台不同验证方法不同,如linux/windows/os三种平台下的验证方法分别如下:

    1.在linux平台下,您可以使用host ip命令反解ip来判断是否来自Baiduspider的抓取。Baiduspider的hostname以 .baidu.com 或 .baidu.jp 的格式命名,非 .baidu.com 或 .baidu.jp 即为冒充。

    $ host 123.125.66.120
    120.66.125.123.in-addr.arpa domain name pointer
    baiduspider-123-125-66-120.crawl.baidu.com.
    
    host 119.63.195.254
    254.195.63.119.in-addr.arpa domain name pointer
    BaiduMobaider-119-63-195-254.crawl.baidu.jp.

    2.在windows平台或者IBM OS/2平台下,您可以使用nslookup ip命令反解ip来判断是否来自Baiduspider的抓取。打开命令处理器 输入nslookup xxx.xxx.xxx.xxx(IP地址)就能解析ip, 来判断是否来自Baiduspider的抓取,Baiduspider的hostname以 .baidu.com 或 .baidu.jp 的格式命名,非 .baidu.com 或 .baidu.jp 即为冒充。

    3.在mac os平台下,您可以使用dig 命令反解ip来 判断是否来自Baiduspider的抓取。打开命令处理器 输入dig xxx.xxx.xxx.xxx(IP地 址)就能解析ip, 来判断是否来自Baiduspider的抓取,Baiduspider的hostname以 .baidu.com 或 .baidu.jp 的格式命名,非 .baidu.com 或 .baidu.jp 即为冒充。

    我不想我的网站被Baiduspider访问,我该怎么做?

    Baiduspider遵守互联网robots协议。您可以利用robots.txt文件完全禁止Baiduspider访问您的网站,或者禁止Baiduspider访问您网站上的部分文件。 注意:禁止Baiduspider访问您的网站,将使您的网站上的网页,在百度搜索引擎以及所有百度提供搜索引擎服务的搜索引擎中无法被搜索到。关于robots.txt的写作方法,请参看我们的介绍:robots.txt写作方法

    您可以根据各产品不同的user-agent设置不同的抓取规则,如果您想完全禁止百度所有的产品收录,可以直接对Baiduspider设置禁止抓取。

    以下robots实现禁止所有来自百度的抓取:

    User-agent: Baiduspider Disallow: /

    以下robots实现禁止所有来自百度的抓取但允许图片搜索抓取/image/目录:

    User-agent: Baiduspider Disallow: /
    
    User-agent: Baiduspider-image Allow: /image/

    请注意:Baiduspider-cpro抓取的网页并不会建入索引,只是执行与客户约定的操作,所以不遵守robots协议,如果Baiduspider-cpro给您造成了困扰,请联系union1@baidu.com。 Baiduspider-ads抓取的网页并不会建入索引,只是执行与客户约定的操作,所以不遵守robots协议,如果Baiduspider-ads给您造成了困扰,请联系您的客户服务专员。

    为什么我的网站已经加了robots.txt,还能在百度搜索出来?

    因为搜索引擎索引数据库的更新需要时间。虽然Baiduspider已经停止访问您网站上的网页,但百度搜索引擎数据库中已经建立的网页索引信息,可能需要数月时间才会清除。另外也请检查您的robots配置是否正确。
    如果您的拒绝被收录需求非常急迫,也可以通过投诉平台反馈请求处理。

    我希望我的网站内容被百度索引但不被保存快照,我该怎么做?

    Baiduspider遵守互联网meta robots协议。您可以利用网页meta的设置,使百度显示只对该网页建索引,但并不在搜索结果中显示该网页的快照。
    和robots的更新一样,因为搜索引擎索引数据库的更新需要时间,所以虽然您已经在网页中通过meta禁止了百度在搜索结果中显示该网页的快照,但百度搜索引擎数据库中如果已经建立了网页索引信息,可能需要二至四周才会在线上生效。

    Baiduspider抓取造成的带宽堵塞?

    Baiduspider的正常抓取并不会造成您网站的带宽堵塞,造成此现象可能是由于有人冒充Baiduspider恶意抓取。如果您发现有名为Baiduspider的agent抓取并且造成带宽堵塞,请尽快和我们联系。您可以将信息反馈至投诉平台,如果能够提供您网站该时段的访问日志将更加有利于我们的分析。


    一般情况下,大多数网站创建者或管理员都会在网站的根目录放置一个名为robots.txt的文本文件,用来控制自己的网站哪些目录允许SE搜索引擎[1] 爬行并收录,哪些目录禁止搜索引擎收录,Disallow,正是robots.txt文件中设置禁止搜索引擎收录哪些目录的一个词语。

    例子:
    允许所有SE(搜索引擎)收录本站:robots.txt为空就可以,什么都不要写。
    禁止所有SE(搜索引擎)收录网站的某些目录:

    User-agent: *
    Disallow: /目录名1/
    Disallow: /目录名2/
    Disallow: /目录名3/

    禁止某个SE(搜索引擎)收录本站,例如禁止百度:

    User-agent: Baiduspider
    Disallow: /

    禁止所有SE(搜索引擎)收录本站:

    User-agent: *
    Disallow: /

    它的用途是告诉上一子集,确定某个对象用的。

    什么是robots.txt

    robots.txt是一个纯文本txt文件,用在网站服务器上。它是搜索引擎访问网站的时候要查看的第一个文件,robots.txt文件告诉搜索引擎在服务器上什么文件是可以被查看的,哪些网页可以收录,哪些不允许收录,对与seo优化而言,放置一个robots.txt是对搜索引擎友好的表现,robots.txt必须放置在一个站点的根目录下,且文件名必须全部小写。

    robots.txt作用

    robots.txt主要作用是保障网络安全与网站隐私,搜索引擎遵循robots.txt协议。通过根目录中创建的纯文本文件robots.txt,网站就可以声明哪些页面不想被搜索引擎爬行并收录,每个网站都可以自主控制网站是否愿意被搜索引擎收录,或者指定搜索引擎只收录指定的内容。当搜索引擎访问某个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果该文件不存在,那么爬虫就沿着链接抓取,如果存在,爬虫就会按照该文件中的内容来确定访问的范围。

    robots.txt文件的格式

    User-agent:_____ 空白处为定义搜索引擎的类型;
    Crawl-delay:_____ 空白处为定义抓取延迟;
    Disallow:_____ 空白处为定义禁止搜索引擎收录的地址;
    Allow:_____ 空白处为定义允许搜索引擎收录的地址;

    360搜索对Robots协议的支持

    360搜索支持Robots协议的主要命令,以下为具体说明:

    user-agent

    360搜索支持user-agent命令,包括使用通配符的user-agent命令。360搜索各产品的爬虫user-agent为:

    • 网页搜索 360Spider
    • 网页搜索 HaoSouSpider

    360搜索将优先使用HaoSouSpider来访问站点,如果遇到UA识别无法下载页面,会再用 360spider抓取,蜘蛛IP不更改。

    • 图片搜索 360Spider-Image

    • 视频搜索 360Spider-Video

    Allow

    站长可通过Allow命令指定建议收录的文件、目录 。

    Disallow

    站长可通过Disallow命令指定不建议收录的文件、目录。

    360搜索对Robots协议的扩展

    360搜索根据站长们的反馈,会陆续推出扩展的Robots协议命令。这些命令将能帮助站长们提高和360搜索爬虫沟通的效率,减少站长们维护Robots协议文件的技术成本。

    360搜索首个扩展命令是:indexpage,站长们可以使用此命令告知360搜索哪些网页经常更新。360搜索会根据站长的指示以及自己的算法,智能调整爬虫抓取频率,实现对您网站新内容的更高频率抓取。

    在命令中可以使用*、$等通配符。

    示例:

    使用通配符的

    Indexpage: http://bbs.360safe.com/forum-*-1.html$
    
    Indexpage: http://ent.sina.com.cn/*/roll.html

    不用通配符的:

    Indexpage: http://roll.tech.sina.com.cn/internet_all/index.shtml
    
    Indexpage: http://roll.tech.sina.com.cn/it/index.shtml
    
    Indexpage: http://roll.tech.sina.com.cn/tele/index.shtml
    
    Indexpage: http://roll.tech.sina.com.cn/discovery/index.shtml
    
    Indexpage: http://roll.tech.sina.com.cn/elec/index.shtml

    对Robots协议的善意使用

    Robots协议是一个搜索引擎和网站之间的善意协议,我们鼓励站长们也以善意的方式使用这一协议,尽量提供准确的信息,除非有充足理由,不使用Robots协议屏蔽某些特定搜索引擎爬虫。

    360搜索愿和站长们一起,共建一个更健康、公平、透明的搜索引擎生态系统。

    展开全文
  • 99%的人不知道搜索引擎的6个技巧

    万次阅读 多人点赞 2019-11-27 00:55:22
    加“星标★”,每天11.50,好文必达 全文约900字,预计阅读时间1分钟 ...搜索引擎一般都会有一些高级的搜索技巧,掌握这些技巧之后就可以过滤掉一些不想要的噪音,迅速找带自己想要的信息,只是很少...

    点击上方“dotNET全栈开发”,“设为星标

    加“星标”,每天11.50,好文必达

    全文约900字,预计阅读时间1分钟

    今天看了一期seo优化的视频,其中就有这么一篇关于百度搜索的几个小技巧,这里整理出来,分享给大家。不是标题党,真的99%的人都不知道这个6个小技巧。

    搜索引擎一般都会有一些高级的搜索技巧,掌握这些技巧之后就可以过滤掉一些不想要的噪音,迅速找带自己想要的信息,只是很少人知道和使用。

    好的搜索方法会提高搜索效率,那么在百度搜索时有哪些搜索方法呢?其实其他搜索引擎也一样。

    1.搜索指定网址的关键信息 site:

    比如我只想搜索csdn或者博客园,比如我想搜索自己的博客在csdn\博客园的文章,需要在site: 指定网址site: cnblogs.com 张林

    2.完全匹配关键字  ""

    使用双引号 “”,即可完全匹配某个关键字比如我们要搜索 dotNet全栈开发 这个关键字,加上双引号后,其结果是有限展示 这个完整关键字的结果,而不是含有这个完整关键词中的某个词 不加双引号加双引号后的结果是 完整关键词  dotnet全栈开发

    3.限定标题包含关键词 intitle:

    方法:查询词前加上intitle:(intitle 加上 英文冒号 加上 搜错关键词 ) 比如搜索 张善友.NET Core ,这个潜意识下,我们想搜索的结果是 张善友发布的一些.NET Core文章标题的的相关消息,如果你不加intitle:可能会有其他乱七八糟的文章,毕竟我们想看的是队长发布的.net core相关的文章

    4.包含视频法,在查询词后加上inurl:video

    比如:.net core 视频,我们可以这样搜索 inurl:video .net core,那么得到的网页一定包含视频。(当然你要搜索某些动作女明星,我并没有权利组织你这样做,哈哈哈......)

    5.限定格式法,在查询词后输入filetype:格式(pdf/xls…)

    比如我们要搜索 区块链相关的pdf,可以这样做filetype:PDF 区块链搜索结果如下

    6特定查询词法,在想要搜到的词前面加上加号+

    加号前面要空格,加号后不要空格。比如我搜索自己的相关的博客文章 张林 +xamarin csdn(早年在csdn写了一些xamarin相关的视频)

    (ps:其他搜索引擎也是类似)

    推荐阅读

    有哪些看起来很沙雕的公众号,其实他们月入三万的

    推荐:程序员必装的10款谷歌插件

    给妹子修电脑的悲惨故事

    牛逼,是他一次次将国人智商踩在地上摩擦

     面试官:你们前后端分离的接口规范是什么?

    程序员:我终于知道post和get的区别

    3万字通俗易懂告诉你什么是.NET?什么是.NET Framework?什么是.NET Core?

    面试官:你连RESTful都不知道我怎么敢要你?

     不知道&和&&的区别?

    面试官:浏览器输入 URL 回车之后发生了什么?

    扫码关注我们

    dotNet全栈开发

    入群方式:公众号内回复"加群"

    关键字回复:"资源"

    领取c#|前端 入门进阶教程资源

    展开全文
  • 爬虫搜索,简单的搜索引擎,java爬虫,搜索引擎例子,爬虫demo,java实现互联网内容抓取,搜索引擎大揭密.java爬虫程序。web搜索。爬虫程序。sigar搜索,定时搜索互联网内容信息。
  • 开源搜索引擎 种子搜索 很久以前,互联网很小,只有几个人可以将它们编入索引,这些人收集了所有网站的名称和位置,并按页面或印刷书籍中的主题列出了它们。 随着万维网网络的发展,“网络响动”惯例得到了发展,在...

    开源搜索引擎 种子搜索

    很久以前,互联网很小,只有几个人可以将它们编入索引,这些人收集了所有网站的名称和位置,并按页面或印刷书籍中的主题列出了它们。 随着万维网网络的发展,“网络响动”惯例得到了发展,在该惯例中,具有类似主题,主题或敏感性的站点捆绑在一起,形成了通往每个成员的循环路径。 环中任何站点的访问者都可以单击按钮以转到环中的下一个或上一个站点,以发现与其兴趣相关的新站点。

    过了一会儿,互联网似乎变得不合时宜了。 每个人都在线,那里有很多冗余和垃圾邮件,无法找到任何东西。 Yahoo和AOL,CompuServe以及类似的服务具有独特的方法,但是直到Google出现后,现代模型才得以普及。 根据Google的说法,应该通过搜索引擎对互联网进行索引,排序和排名。

    为什么选择开源替代品?

    但是也许出于隐私方面的考虑,或者因为您希望为使互联网更加独立而做出的贡献,您不愿意使用Google或DuckDuckGo。 如果这对您有吸引力 ,那么可以考虑加入YaCy (对等互联网索引器和搜索引擎)。

    安装YaCy

    要安装并尝试YaCy,请首先确保已安装Java。 如果您使用的是Linux,则可以按照《 如何在Linux上安装Java》一文中的说明进行操作。 如果您使用的是Windows或MacOS,请从AdoptOpenJDK.net获取安装程序。

    安装Java后, 下载适用于您平台的安装程序

    如果您使用的是Linux,请解压缩tarball并将其移至/ opt目录:

     $  sudo tar --extract --file  yacy_ * z --directory / opt 
    

    根据下载的安装程序的说明启动YaCy。

    在Linux上,启动在后台运行的YaCy:

     $  / opt / yacy / startYACY.sh & 
    

    在Web浏览器中,导航到localhost:8090并搜索。

    YaCy start page

    将YaCy添加到您的URL栏

    如果您使用的是Firefox Web浏览器,则只需单击几下,即可在Awesome Bar(即URL字段的Mozilla名称)中将YaCy设置为默认搜索引擎。

    首先,将专用搜索栏显示在Firefox工具栏中(如果尚未显示)(您不必使搜索栏保持可见;只需要激活它足够长的时间即可添加自定义搜索引擎)。 搜索栏位于Firefox右上角“ 自定义”菜单中的“汉堡”菜单中。 在Firefox工具栏上显示搜索栏后,导航至localhost:8090 ,然后单击刚刚添加的Firefox搜索栏中的放大镜图标。 单击选项将YaCy添加到您的Firefox搜索引擎。

    Adding YaCy to Firefox

    完成此操作后,您可以在Firefox首选项中将其标记为默认值,或者仅在Firefox搜索栏中执行的搜索中选择性地使用它。 如果将其设置为默认搜索引擎,则可能不需要专用的搜索栏,因为Awesome Bar也使用默认引擎,因此可以将其从工具栏中删除。

    P2P搜索引擎如何工作

    YaCy是一个开源的分布式搜索引擎。 它是用Java编写的,因此可以在任何平台上运行,并且可以执行Web爬网,索引和搜索。 这是一个对等(P2P)网络,因此每个运行YaCy的用户都将努力跟踪互联网的变化。 当然,没有单个用户拥有整个互联网的完整索引,因为这将需要一个数据中心来容纳,但是该索引在所有YaCy用户中都是分布式且冗余的。 它与BitTorrent非常相似(因为它使用分布式哈希表或DHT来引用索引条目),所共享的数据是单词和URL关联的矩阵。 通过混合哈希表返回的结果,没人能告诉谁搜索了哪些单词,因此所有搜索在功能上都是匿名的。 它是用于无偏见,无广告,未跟踪和匿名搜索的有效系统,您可以通过使用它来加入。

    搜索引擎和算法

    为互联网建立索引的行为是指将网页分成单数个单词,然后将页面的URL与每个单词相关联。 在搜索引擎中搜索一个或多个单词将获取与查询关联的所有URL。 这是YaCy客户端在运行时所做的一件事。

    客户端要做的另一件事是为您的浏览器提供搜索界面。 您可以将网络浏览器指向localhost:8090来搜索YaCy,而不是在要搜索时导航到Google。 您甚至可以将其添加到浏览器的搜索栏中(取决于浏览器的可扩展性),因此可以从URL栏中进行搜索。

    YaCy的防火墙设置

    首次开始使用YaCy时,它可能在“初级”模式下运行。 这意味着您的客户端爬网的站点仅对您可用,因为其他YaCy客户端无法访问您的索引条目。 要加入P2P体验,必须在路由器的防火墙中打开端口8090,如果正在运行,则必须在软件防火墙中打开端口。 这称为“高级”模式。

    如果您使用的是Linux,则可以在通过防火墙增强Linux中找到有关计算机防火墙的更多信息。 在其他平台上,请参考操作系统的文档。

    互联网服务提供商(ISP)提供的路由器上几乎总是启用防火墙,并且这里有太多种类的防火墙无法准确记录。 大多数路由器都提供了在防火墙中“戳破”的选项,因为许多流行的联网游戏都需要双向流量。

    如果您知道如何登录路由器(通常为192.168.0.1或10.1.0.1,但可能会因制造商的设置而异),则登录并查找配置面板来控制防火墙端口转发应用程序

    找到路由器防火墙的首选项后,将端口8090添加到白名单。 例如:

    Adding YaCy to an ISP router

    如果路由器正在进行端口转发,则必须使用相同的端口将传入的流量转发到计算机的IP地址。 例如:

    Adding YaCy to an ISP router

    如果由于某种原因无法调整防火墙设置,那就可以了。 YaCy将继续以初级模式运行并作为P2P搜索网络的客户端运行。

    自己的互联网

    使用YaCy搜索引擎可以做的不仅仅是被动搜索。 您可以强制抓取代表性不足的网站,可以请求对网站进行网络抓取,可以选择使用YaCy进行本地搜索,等等。 你必须在的因特网看起来像什么更好的控制。 高级用户越多,索引的网站越多。 索引的网站越多,所有用户的体验就越好。 加入!

    翻译自: https://opensource.com/article/20/2/open-source-search-engine

    开源搜索引擎 种子搜索

    展开全文
  • 使用Python实现简单的搜索引擎,完整源码

    万次阅读 多人点赞 2019-03-03 18:03:48
    版权声明:转载请注明出处!...结合本学期《信息检索与搜索引擎技术》课程教学内容,利用网络爬虫技术、文档倒排索引技术、向量空间模型技术、检索排序技术,编写一个搜索引擎系统,系统能够实现根据...

    版权声明:转载请注明出处!

    https://blog.csdn.net/qq_35993946/article/details/88087827

    这是博主我大学期间写的课程设计,希望能对看这篇博客的你有所帮助。

    课程设计主要要求如下:

    结合本学期《信息检索与搜索引擎技术》课程教学内容,利用网络爬虫技术、文档倒排索引技术、向量空间模型技术、检索排序技术,编写一个搜索引擎系统,系统能够实现根据输入关键词检索出与查询关键词相关的文档,并写出对应的程序设计及实现报告。具体要求如下:

    利用网络爬虫技术编写程序实现从互联网中动态爬去网页数据;

    利用分词工具(如ICTCLAS、结巴分词等)实现对爬取的文本进行分词,并建立倒排索引;

    利用向量空间模型对分词后的文本及查询文本进行向量化表示,并计算查询向量和文档向量之间的相似性;

    利用BM25算法、统计语言模型方法、或PageRank算法计算查询文本与文档之间的相关度得分,并根据相关度得分对文档进行排序。

     

    目录

    一、 系统概述 

    1.1搜索引擎概述 

    1.2本搜索引擎概述 

    二、 系统需求分析 

    2.1云南旅游业分析 

    2.2系统可行性分析 

    三、算法原理及程序实现 

    3.1系统架构设计 

    3.2网络爬虫 

    3.2.1网络爬虫简介 

    3.2.2网页分析 

    3.3结巴分词并建立索引 

    3.3.1结巴分词简介 

    3.3.2倒排索引原理

    3.3.3程序实现 

    3.4向量空间模型 

    3.4.1向量空间模型原理 

    3.4.2代码实现原理 

    3.5 BM25算法 

    3.5.1 BM25算法原理 

    3.5.2 代码实现 

    3.6 网页实现框架:Flask及后台处理 

    3.6.1Flask简介 

    3.6.2代码实现 

    3.7 web界面设计 

    3.7.1 HTML简介 

    3.7.2 网页界面 

    四、程序展示 

    五、总结与体会 

    六、参考文献 

    七、附录 

    摘要

    随着科技的进步与发展,互联网成为21世纪的宠儿,网络信息也复杂多样。这些繁杂的网络信息在给我们带来便利的同时也产生了极大的问题,比如如何在这海量的信息里面找到自己所需要的内容,成为当前互联网技术的热门领域。互联网信息复杂多样,因此想要迅速、快捷的找到所需要的信息内容,就需要搜索引擎来帮忙实现。本文就对搜索引擎的工作原理,组成和数据结构等方面进行分析,实现搜索引擎,并能对云南旅游网的内容进行搜索,适应用户的查询需求。

    关键词: 搜索引擎;信息检索;网络爬虫;向量空间模型;网页排序

     

    • 系统概述

    随着信息时代的来临,互联网的迅速普及应用,已经成为我们 正常生活中不可或缺的一部分。因为互联网信息具备共享等多种特性,使得网络信息成倍的增加。谷歌公司所收录的网页信息都已经过百亿,而且每天还在不断的攀升,想要在这么多数据里面,选取对自己有用的信息,就需要借助搜索引擎来进行实现。 搜索引擎是从1994年诞生,随着互联网的信息日益增多,搜索引擎也在不断的发展,从1994年到现在历经三个阶段。搜索引擎的第一个阶段就是1994年到1996年,这个阶段的搜索引擎以集中式检索 为主。当时网络信息并没有很多,一般都是少于百万的网页,也没有 索引,检索速度也非常慢。也是采用网络、数据库等关键技术来实现。第二个阶段是1996年到1998年,这个期间,搜索引擎采用分布式检索方案,使用多个微型计算机来协同工作,其目的是为了提高数据规模和响应速度。一般可以响应千万次的用户检索请求。第三代搜索引擎,就当前所使用的搜索引擎,也是搜索引擎极为繁荣的时期。它拥有完整的索引数据库,除了一般的搜索,还有主题搜索和地域搜索。但是这些搜索结果反馈给用户的数据量较大,检索结果的相关度又成为研究的核心。

    本系统利用Python语言对搜索引擎的三个主要部件进行实现,能够完成搜索引擎的基本功能。通过本系统,用户能对云南旅游网的信息进行搜索,主要是爬取云南旅游网(http://travel.yunnan.cn/),方便用户在云南旅游,方便查找攻略,给用户创造一个愉快的旅游环境。

    系统的工作流程分为四步,从网上抓取网页,建立索引数据库,根据用户的关键词在索引数据库中进行搜索,对搜索结果进行相关度排序处理。它主要由网络蜘蛛、索引器和检索器三部分组成。网络蜘蛛,英文名称Web Spider,它的主要功能是从指定的IP出发,便利整个互联网中所存在的网页,它可以借助网页中的URL爬到其他网页中去,不停的对这个过程进行重复,将爬过的网页搜集起来并存储到页面存储库中去。Indexer,索引器,它的主要功能是将Web Spider收集回来的网页进行分析,提取网页中所含的信息,并按照相关度进行计算,将这些相关信息建立完整的网页索引数据库。Searcher,检索器,用户输入关键词进行搜索,它负责对关键词进行分解,根据搜索器从网页索引数据库中查询到相关度较高的网页,对其进行排序处理,然后交给系统,系统会把结果进行组织处理,反馈给用户。搜索引擎对于文件的存储要求较高,操作系统又有自身的缺陷,在大型文件的管理方面存在诸多局限,这就需要搜索引擎自行定义和管理大型文件系统。大型文件是一种跨多文件系统的虚拟文件,支持64位寻址方式,可自动处理多文件系统的分配和寻址。

    在进行软件开发前期,我们需要进行Python开发环境的搭建,需要Python程序开发包:Python3.6 ,开发IDE:JetBrains PyCharm2017.1,结巴中文分词包:jieba,网页实现框架:Flask,实现HTTP的第三方库requests。后面第三节会对本搜索引擎所用到的相关技术进行介绍,包括爬虫技术,结巴分词,向量空间模型,BM25算法等。

     

    • 系统需求分析

    2.1旅游业分析

    搜索引擎能自动从英特网搜集信息,经过一定整理以后,提供给用户进行查询的系统。英特网上的信息浩瀚万千,而且毫无秩序,所有的信息象汪洋上的一个个小岛,网页链接是这些小岛之间纵横交错的桥梁,而搜索引擎,则为你绘制一幅一目了然的信息地图,供你随时查阅。

    随着我国经济的发展,旅游成了人们新的消费需求。在旅游业快速发展的同时,人们对旅游的附加产品的需求也越来越大。

    查阅资料我们能知道这些数据,云南省2018年上半年累计接待海外游客362.83万人次,比去年同期增长8.23%;接待国内游客33596.97万人次,比去年同期增长27.18%;实现旅游业总收入4201.35亿元,比去年同期增长26.78%。

    各州市紧紧围绕旅游强省目标任务进行旅游市场及产业建设,实现旅游接待量和旅游收入双增长。在目前公开的数据中,客接待量全省前三位的州市分别为红河(3116.47万人次)、大理(2448.56万人次)、楚雄(2354.72万人次);旅游收入全省前三位的州市分别为大理(377.19亿元)、红河(332.67亿元)、保山(332亿元)。

    在出游时,人们经常会查阅资料,地图、住宿、交通、美食等。人们可能会去百度搜索,或者去app上查找。但是,百度烦人的医疗广告,许多的恶意刷景点好评。导致许多我们搜索到的并不是我们想要的,因此,开发一个无广告、准确而好用的旅游攻略搜索引擎会受到大部分游客的欢迎。

    2.2系统可行性分析

    2.1 对现有系统的分析

    现有搜索引擎如百度、Google等难以为用户提供有效的个性化服务。由于不同用户的兴趣爱好各不相同,所以所需的检索结果也应该具有一定的针对性,但现有的搜索引擎无法为单个用户提供有效的个性化服务,大大增加了用户查询有用信息的时间。 

    2.2 对建议技术的可行性分析

    2.2.1 技术上的可行性

    此次系统开发使用Python语言,该语言简单易学,又增强了可视化、数据库及Internet编程功能,很容易就可以进行系统开发。因此系统开发工具可以采用Python进行开发。而对IDE,采用JetBrains PyCharm。该软件简单易懂,应用广泛,比较适合新手上路使用。 

    2.2.2 管理上的可行性

    因为系统主要应用于出门来云南旅游的人士,后期爬虫数据处理量增多搜索结果更多更准确后,可以考虑部署到服务器上,让更多人使用。

    2.3 社会因素的分析

    随着科学技术的不断提高,计算机科学日渐成熟,大数据时代,信息需求越来越大。爬取公共数据,该软件的开发不会侵犯国家、集体和他人的利益。

    三、算法原理及程序实现

    3.1系统架构设计

    搜索引擎有基本的五大模块,分别是信息采集,信息处理,建立索引,查询和 web 交互。本次课程设计研究的是如何在信息处理分析的基础上,建立一个完整的中文搜索引擎。所以该系统主要由以下几个详细部分组成:爬取数据,中文分词,相关度排序,建立索引库,建立查询服务器,建立web交互。

    3.2网络爬虫

    3.2.1网络爬虫简介

    网络爬虫是捜索引擎抓取系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。

       

    一个通用的网络爬虫的框架如图所示:

      网络爬虫的基本工作流程如下:

        1.首先选取一部分精心挑选的种子URL;

        2.将这些URL放入待抓取URL队列;

        3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并 将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓 取URL队列。

        4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓 取URL队列,从而进入下一个循环。

    3.2.2网页分析

    (1)分析要爬取的网页的代码,确定我们所需要的内容并用XPATH表达式定位其内容,用正则表达式筛选我们需要的内容,将编号,title,url,写入本地,存入docs.txt中。

    # encoding=utf-8
    # 导入爬虫包
    from selenium import webdriver
    # 睡眠时间
    import time
    import re
    import os
    import requests
    # 打开编码方式utf-8打开
    
    # 睡眠时间 传入int为休息时间,页面加载和网速的原因 需要给网页加载页面元素的时间
    def s(int):
        time.sleep(int)
    
    
    # html/body/div[1]/table/tbody/tr[2]/td[1]/input
    # http://dmfy.emindsoft.com.cn/common/toDoubleexamp.do
    
    if __name__ == '__main__':
        #查询的文件位置
       # fR = open('D:\\test.txt','r',encoding = 'utf-8')
    
        # 模拟浏览器,使用谷歌浏览器,将chromedriver.exe复制到谷歌浏览器的文件夹内
        chromedriver = r"C:\\Users\\zhaofahu\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe"
        # 设置浏览器
        os.environ["webdriver.chrome.driver"] = chromedriver
        browser = webdriver.Chrome(chromedriver)
        # 最大化窗口 用不用都行
        browser.maximize_window()
      #  header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
    
        # 要爬取的网页
        neirongs = []  # 网页内容
        response = []  # 网页数据
        travel_urls = []
        urls = []
        titles = []
        writefile = open("docs.txt", 'w', encoding='UTF-8')
        url = 'http://travel.yunnan.cn/yjgl/index.shtml'
        # 第一页
        browser.get(url)
        response.append(browser.page_source)
        # 休息时间
        s(3)
    
        # 第二页的网页数据
        #browser.find_element_by_xpath('// *[ @ id = "downpage"]').click()
        #s(3)
        #response.append(browser.page_source)
        #s(3)
    
        # 第三页的网页数据
        #browser.find_element_by_xpath('// *[ @ id = "downpage"]').click()
        #s(3)
        #response.append(browser.page_source)
    
    
        # 3.用正则表达式来删选数据
        reg = r'href="(//travel.yunnan.cn/system.*?)"'
        # 从数据里爬取data。。。
        # 。travel_urls 旅游信息网址
        for i in range(len(response)):
            travel_urls = re.findall(reg, response[i])
    
        # 打印出来放在一个列表里
        for i in range(len(travel_urls)):
            url1 = 'http:' + travel_urls[i]
            urls.append(url1)
            browser.get(url1)
            content = browser.find_element_by_xpath('/html/body/div[7]/div[1]/div[3]').text
            # 获取标题作为文件名
            b = browser.page_source
            travel_name = browser.find_element_by_xpath('//*[@id="layer213"]').text
            titles.append(travel_name)
        print(titles)
        print(urls)
        for j in range(len(titles)):
            writefile.write(str(j) + '\t\t' + titles[j] + '\t\t' + str(urls[j])+'\n')
    
        s(1)
        browser.close()

     

    3.3结巴分词并建立索引

    3.3.1结巴分词简介

    jieba 是一个基于Python的中文分词工具对于一长段文字,其分词原理大体可分为三步:

    1.首先用正则表达式将中文段落粗略的分成一个个句子。

    2.将每个句子构造成有向无环图,之后寻找最佳切分方案。

    3.最后对于连续的单字,采用HMM模型将其再次划分。

    jieba分词分为“默认模式”(cut_all=False),“全模式”(cut_all=True)以及搜索引擎模式。对于“默认模式”,又可以选择是否使用 HMM 模型(HMM=True,HMM=False)。

    3.3.2倒排索引原理

    倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成:“单词词典”和“倒排文件”。

    倒排索引有两种不同的反向索引形式:

    一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。

    一个单词的水平反向索引(完全反向索引)又包含每个单词在一个文档中的位置。

    后者的形式提供了更多的兼容性(比如短语搜索),但是需要更多的时间和空间来创建。

    通过上面的定义可以知道,一个倒排索引包含一个单词词典和一个倒排文件。其中单词词典包含了所有粒度的拆分词;倒排文件则保存了该词对应的所有相关信息。

     

    3.3.3程序实现 

    1. 对爬取的文档进行分词

         2.建立索引库关键代码

    #  建索引
    from doc import Doc
    import jieba
    import math
    
    class Indexer:
        inverted = {}   # 记录词所在文档及词频
        idf = {}         # 词的逆文档频率
        id_doc = {}     # 文档与词的对应关系
    
        def __init__(self, file_path):
            self.doc_list = []
            self.index_writer(file_path)
    
        def index_writer(self, file_path):
            with open(file_path, 'r', encoding='utf-8') as f:
                for line in f.readlines():
                    key, title, link = line.strip().split('\t\t')
                    doc = Doc()
                    doc.add('key', key)
                    doc.add('title', title)
                    doc.add('link', link)
                    self.doc_list.append(doc)
            self.index()
    
        def index(self):
            doc_num = len(self.doc_list)     # 文档总数
            for doc in self.doc_list:
                key = doc.get('key')
                # 正排
                self.id_doc[key] = doc
    
                # 倒排
                term_list = list(jieba.cut_for_search(doc.get('title')))   # 分词
                for t in term_list:
                    if t in self.inverted:
    
                        if key not in self.inverted[t]:
                            self.inverted[t][key] = 1
                        else:
                            self.inverted[t][key] += 1
                    else:
                        self.inverted[t] = {key: 1}
    
            for t in self.inverted:
                self.idf[t] = math.log10(doc_num / len(self.inverted[t]))
    
            print("inverted terms:%d" % len(self.inverted))
            print("index done")
    
    if __name__ == '__main__':
        print("index")
        Indexer("docs.txt")

    3.4向量空间模型

    3.4.1向量空间模型原理

    向量空间模型(vector space model)概念简单,把对文本内容的处理简化为向量空间中的向量运算,并且它以空间上的相似度表达语义的相似度,直观易懂。当文档被表示为文档空间的向量,就可以通过计算向量之间的相似性来度量文档间的相似性。文本处理中最常用的相似性度量方式是余弦距离。

    搜索引擎需要计算“用户查询”和爬下来的众多”网页“之间的相似度,从而把最相似的排在最前返回给用户。

    3.4.2代码实现原理

    代码主要使用的算法是tf-idf

    tf:term frequency 词频

    idf:inverse document frequency 倒文档频率

    主要思想是:如果某个词或短语在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

    第一步:把每个网页文本分词,成为词包(bag of words)。

    第三步:统计网页(文档)总数M。

    第三步:统计第一个网页词数N,计算第一个网页第一个词在该网页中出现的次数n,再找出该词在所有文档中出现的次数m。则该词的tf-idf 为:n/N * 1/(m/M)  (还有其它的归一化公式,这里是最基本最直观的公式)

    第四步:重复第三步,计算出一个网页所有词的tf-idf 值。

    第五步:重复第四步,计算出所有网页每个词的tf-idf 值。

    代码如下:
    # 关键词统计和词频统计,以列表形式返回
    def Count(resfile):
        t = {}
        infile = open(resfile, 'r', encoding='utf-8-sig')
        f = infile.readlines()
        count = len(f)
        # print(count)
        infile.close()
        s = open(resfile, 'r', encoding='utf-8-sig')
        i = 0
        while i < count:
            line = s.readline()
        # 去换行符
            line = line.rstrip('\n')
            # print(line)
            words = line.split(" ")
            #   print(words)
    
            for word in words:
                    if word != "" and t.__contains__(word):
                        num = t[word]
                        t[word] = num + 1
                    if word !="":
                        t[word] = 1
            i = i + 1
    
        # 字典按键值降序
        dic = sorted(t.items(), key=lambda t: t[1], reverse=True)
        # print(dic)
        # print()
        s.close()
        return (dic)
    
    def MergeWord(T1, T2):
    
        MergeWord = []
        duplicateWord = 0
        for ch in range(len(T1)):
            MergeWord.append(T1[ch][0])
        for ch in range(len(T2)):
            if T2[ch][0] in MergeWord:
                duplicateWord = duplicateWord + 1
            else:
                MergeWord.append(T2[ch][0])
    
        # print('重复次数 = ' + str(duplicateWord))
        # 打印合并关键词
        # print(MergeWord)
        return MergeWord
    
    
    # 得出文档向量
    def CalVector(T1, MergeWord):
        TF1 = [0] * len(MergeWord)
        for ch in range(len(T1)):
            TermFrequence = T1[ch][1]
            word = T1[ch][0]
            i = 0
        while i < len(MergeWord):
            if word == MergeWord[i]:
                TF1[i] = TermFrequence
                break
            else:
                i = i + 1
            # print(TF1)
        return TF1
    
    
    def CalConDis(v1, v2, lengthVector):
        # 计算出两个向量的乘积
        B = 0
        i = 0
        while i < lengthVector:
            B = v1[i] * v2[i] + B
            i = i + 1
        # print('乘积 = ' + str(B))
    
        # 计算两个向量的模的乘积
        A = 0
        A1 = 0
        A2 = 0
        i = 0
        while i < lengthVector:
            A1 = A1 + v1[i] * v1[i]
            i = i + 1
        # print('A1 = ' + str(A1))
    
        i = 0
        while i < lengthVector:
            A2 = A2 + v2[i] * v2[i]
            i = i + 1
            # print('A2 = ' + str(A2))
    
        A = math.sqrt(A1) * math.sqrt(A2)
        print('两篇文章的相似度 = ' + format(float(B) / A, ".3f"))

    3.5 BM25算法

    3.5.1 BM25算法原理

    BM25 是一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法。BM25属于bag-of-words模型,bag-of-words模型只考虑document中词频,不考虑句子结构或者语法关系之类,把document当做装words的袋子,具体袋子里面可以是杂乱无章的。对每一个搜索查询,我们很容易给每个文档定义一个“相关分数”。当用户进行搜索时,我们可以使用相关分数进行排序而不是使用文档出现时间来进行排序。这样,最相关的文档将排在第一个,无论它是多久之前创建的(当然,有的时候和文档的创建时间也是有关的)。

    我们要从最简单的、基于统计的方法说起。这种方法不需要理解语言本身,而是通过统计词语的使用、匹配和基于文档中特有词的普及率的权重等情况来决定“相关分数”。

    这个算法不关心词语是名词还是动词,也不关心词语的意义。它唯一关心的是哪些是常用词,那些是稀有词。如果一个搜索语句中包括常用词和稀有词,最好让包含稀有词的文档的评分高一些,同时降低常用词的权重。

    3.5.2 代码实现

    (1)对搜索词进行结巴分词;

       term_list = []
            query = query.split()
            for entry in query:
                # 分词
                term_list.extend(jieba.cut_for_search(entry))

    1. 计算tf-idf,找出候选doc;

    # TF−IDF=tf∗idf
    tf_idf = {}
    for term in term_list:
        if term in self.index.inverted:
            for doc_id, fre in self.index.inverted[term].items():
                if doc_id in tf_idf:
                    tf_idf[doc_id] += (1 + math.log10(fre)) * self.index.idf[term]
                else:
                    tf_idf[doc_id] = (1 + math.log10(fre)) * self.index.idf[term]

    (3)文档相关度排序。
            sorted_doc = sorted(tf_idf.items(), key=operator.itemgetter(1), reverse=True)
            res = [self.index.id_doc[doc_id] for doc_id, score in sorted_doc]
            return res

    (4)计算搜索词与爬取文档的匹配度然后将文档排序

    from index import Indexer
    import jieba
    import operator
    import math
    
    """
    搜索
    返回结果:(相关问题,相似度)列表
    搜索步骤:
        1.分词
        2.计算tf-idf,找出候选doc
        3.对文档排序
    """
    
    class Searcher:
    
        def __init__(self, index):
            self.index = index
    
        def search(self, query):
            term_list = []
            query = query.split()
            for entry in query:
                # 分词
                term_list.extend(jieba.cut_for_search(entry))
    
            # 计算tf-idf,找出候选doc
            tf_idf = {}
            for term in term_list:
                if term in self.index.inverted:
                    for doc_id, fre in self.index.inverted[term].items():
                        if doc_id in tf_idf:
                            tf_idf[doc_id] += (1 + math.log10(fre)) * self.index.idf[term]
                        else:
                            tf_idf[doc_id] = (1 + math.log10(fre)) * self.index.idf[term]
            # 排序
            sorted_doc = sorted(tf_idf.items(), key=operator.itemgetter(1), reverse=True)
    
            res = [self.index.id_doc[doc_id] for doc_id, score in sorted_doc]
            return res

     

    3.6 网页实现框架:Flask及后台处理

    3.6.1Flask简介

    Flask 是一个 Python 实现的 Web 开发微框架。基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。

    3.6.2代码实现

    # coding:utf-8
    from flask import Flask, request, render_template, redirect, url_for
    from index import Indexer
    from search import Searcher
    import jieba
    
    from urllib import parse
    import json
    
    app = Flask(__name__, static_url_path='')
    
    
    @app.route("/", methods=['POST', 'GET'])
    def main():
        if request.method == 'POST' and request.form.get('query'):
            query = request.form['query']
            return redirect(url_for('search', query=query))
    
        return render_template('index.html')
    
    
    @app.route("/q/<query>", methods=['POST', 'GET'])
    def search(query):
        docs = searcher.search(query)
        terms = list(jieba.cut_for_search(query))
        result = highlight(docs, terms)
        return render_template('search.html', docs=result, value=query, length=len(docs))
    
    
    def highlight(docs, terms):
        result = []
        print()
        for doc in docs:
            content = doc.get('title')
            for term in terms:
                content = content.replace(term, '<em><font color="red">{}</font></em>'.format(term))
            result.append((doc.get('link'), content))
        return result
    
    
    index = Indexer("docs.txt")
    searcher = Searcher(index)
    
    if __name__ == "__main__":
        app.run(host='localhost', port=8080, debug=True)

    3.7 web界面设计

    3.7.1 HTML简介

    超文本标记语言(标准通用标记语言下的一个应用,外语缩写HTML),是迄今为止网络上应用最为广泛的语言,也是构成网页文档的主要语言。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、动画、声音、表格、链接等。HTML的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。

    3.7.2 网页界面

    (1)主页显示输入框和搜索按钮,提交搜索内容。调用百度的界面css,能保存搜索历史记录。

    关键代码:

    index.html

    <!DOCTYPE HTML>
    <html>
    <head>
        <title>搜索</title>
        <!-- Custom Theme files -->
        <link href="css/style.css" rel="stylesheet" type="text/css" media="all"/>
        <!-- Custom Theme files -->
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <meta name="keywords"
              content="Flat Search Box Responsive, Login form web template, Sign up Web Templates, Flat Web Templates, Login signup Responsive web template, Smartphone Compatible web template, free webdesigns for Nokia, Samsung, LG, SonyErricsson, Motorola web design"/>
        <!--Google Fonts-->
        <link href='http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800'
              rel='stylesheet' type='text/css'>
        <!--Google Fonts-->
    </head>
    <body>
    <!--search start here-->
    <div class="search">
        <i> </i>
        <div class="s-bar">
            <form method="post">
                <input type="text" name="query">
                <input type="submit" value="搜索攻略"/>
            </form>
        </div>
    
    </div>
    </body>
    </html>
    

     (2)副页查询:search.html

    <!doctype html>
    <html ng-app="app">
    
    
    <head>
        <meta charset="UTF-8">
        <title>搜索</title>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
        <link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body ng-controller="ctrl">
    
    
    <div class="container">
        <br>
        <br>
        <form class="form-inline" method="post" action="/">
            <div class="form-group">
                <input type="text" style="height: 40px; width: 360px;" class="form-control" ng-model="query"
                       value="{{ value }}" name="query" id="query"/>
            </div>
            <input class="btn btn-small btn-success" role="button" type="submit" value="攻略搜一下" id="btn">
        </form>
        <br>
        <br>共有{{ length }}条结果
        <br>
        <div id="box">
        {% for doc in docs %}
        <p><a href="{{ doc[0] }}" target="_blank">{{ doc[1]|safe }}</a></p>
        <p>来源:{{ doc[0] }}</p>
        <br>
        {% endfor %}
    </div>
    </div>
    </body>
    </html>

     

    四、程序展示

    4.1搜索页主界面:index.html

       

    4.2搜索结果页,搜索词能在结果中高亮显示:

    4.3页面跳转:

    4.4无结果

    搜索博主名字(https://zhaofh.cn/),发现无结果!!!what fuck??,原来是我没爬取我的网站。呵呵呵,没我的名字。

    五、总结与体会(开始了万年不变的套路模式。。。

    我们身处在一个信息时代,可以通过很多途径接触到关于生活、学习等各方面的知识,但是如何在浩渺的信息海洋里快速而准确地找到我们所需要的东西呢,这成为很多人面临的重要的问题,所以学习信息检索和搜索引擎技术就显得尤为重要了。

    没学习网络信息检索之前,我们总觉得只要有搜索引擎就可以搜到我们需要的东西,但是面对庞杂的信息,我们往往会不知所措,因为当我们输入想要查询的内容后,网络上会出现成百上千个结果,然而这些结果可能没有一个是我们需要的,因此学习使用搜索引擎的原理和实现方法及查询技巧是非常必要的。

    通过建立索引库,搜索查询服务器,以及Web交互,我们基本实现了搜索引擎的核心功能,建立了具有中文分词和关键词高亮显示功能的中文搜索引擎系统。总体来讲,该中文搜索引擎具有很好的可维护性和可扩展性,可以在此基础上开发适应不同业务需求的搜索引擎。

    总结这次搜索引擎程序的实现,发现一个好的搜索引擎,首先需要一个好的爬虫,能够帮你把网络上的各种网页抓取到本地;能够对网页进行去重;考虑到时间或资源成本,还要求爬虫能对网页的重要性进行一定的判断,即先抓取“重要”的网页;还要能及时地更新已有的网页,其次,一个搜索引擎还需要有一套行之有效的索引系统,能够将搜索效率提高,这里涉及到太多东西,以后还需要继续学习。

     

    六、看到了这里,我觉得你可以右上角点赞收藏转发了。。。谢谢各位!!! 

    Following up graduation project major java,sending site letter to me or tencent 191721252

    版权声明:转载请注明出处! https://blog.csdn.net/qq_35993946/article/details/88087827

    展开全文
  • 搜索引擎按其工作方式主要可分为三种,分别是全文搜索引擎(Full Text Search Engine)、目录索引类搜索引擎(Search Index/Directory)和元搜索引擎(Meta Search Engine)。 一.全文搜索引擎是名副其实的搜索引擎,国外...
  • Elasticsearch-分布式搜索引擎

    万次阅读 2020-09-23 16:17:39
    分布式搜索引擎技术——Elasticsearch 1. Elasticsearch是什么? Elasticsearch是一个基于Apache Lucene(TM)的开源的高扩展的分布式搜索引擎 。 它可以做什么: 分布式实时文件存储,并将每一个字段都编入索引,...
  • 几款磁力搜索引擎,找资料更方便

    万次阅读 2020-08-23 14:47:38
    一款强大的磁力搜索引擎网站,这款网站包含有7万多个磁力链接,提供提供网盘形式和磁力形式的储存,有很多你想要的东西。如果是音频和视频的话支持在线观看。 Bt977 磁力搜索引擎,支持网盘播放,磁力下载。 ...
  • 常用搜索引擎指令

    千次阅读 2020-01-20 11:32:18
    搜索引擎优化:就是根据对搜索引擎的算法规则来优化内容,从而使页面能够被搜索引擎信任,并获得较好的排名。 黑帽SEO是用垃圾技术欺骗搜索引擎,一般叫做SEO作弊。黑帽SEO以伪装、欺诈和窃取的方式骗取在SERP中的高...
  • 搜索引擎是什么? 是指根据一定的策略,运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后为用户提供检索服务,将用户检索相关的信息展示给用户的系统。 搜索引擎的优化就是SEO优化。 搜索引擎...
  • python 手把手教你基于搜索引擎实现文章查重

    万次阅读 多人点赞 2020-09-13 22:18:19
    本文使用搜索引擎结果作为文章库,再与本地或互联网上数据做相似度对比,实现文章查重;由于查重的实现过程与一般情况下的微博情感分析实现流程相似,从而轻易的扩展出情感分析功能(下一篇将在此篇代码的基础上完成...
  • 搜索引擎推荐

    千次阅读 2019-04-20 12:29:35
    ​关于搜索,日常使用的非常多,今天来推荐几个搜索引擎。 分为两类,一类是比较小众的搜索引擎,但是用起来也很给力,第二类是谷歌镜像,第三类是搜索引擎导航,有很多搜索引擎,可以快速切换,用起来很方便。 ...
  • 搜索引擎 高级使用

    万次阅读 2017-04-02 00:22:41
    搜索引擎高级用法
  • 资源搜索引擎

    千次阅读 2020-02-05 09:19:59
    1.DogeDoge搜索引擎:https://www.dogedoge.com/
  • python实现搜索引擎(一) 一、实验介绍 1.1 实验知识点 介绍本课程实现的搜索引擎的架构设计 介绍搜索引擎所必要的组件 对课程项目进行开发环境的部署和配置 创建项目及必要的代码目录 1.2 实验环境 ...
  • 一、搜索引擎篇-揭开es神秘的面纱

    万次阅读 2020-05-03 23:45:15
    一、为什么需要搜索引擎? 数据库适合结构化数据的精确查询,而不适合半结构化、 非结构化数据的模糊查询及灵活搜索(特别是数据量大时),无法提供想要的实时性。 结构化数据:用表、字段表示的数据 半结构化...
  • 搜索引擎算法

    千次阅读 2018-07-25 11:14:52
    搜索引擎算法调研
  • 搜索引擎使用技巧

    千次阅读 2018-12-12 10:00:51
    本篇要介绍的搜索引擎包括:Shodan,censys,钟馗之眼,Google,FoFa,Dnsdb等。介绍的内容主要是这几款搜索引擎的一些高级语法,掌握高级语法会让搜索结果更准确。 Google搜索引擎 这里之所以要介绍google搜索...
  • Lucene搜索引擎-搜索

    千次阅读 2018-10-29 22:28:04
    文章目录 如果对Lucene不熟悉的,请移步:Lucene搜索引擎-分词器
  • 正文一:Full Text Search Engines vs. DBMS 发表于2009年 ...不知道大家有没有想过一个问题:数据库服务也支持全文搜索,但我们为什么要用全文搜索引擎! 如果说是全文搜索引擎更快或者性能更好,那为什么呢?我们
  • 夸克(神马)搜索引擎网址

    万次阅读 2020-10-17 23:30:08
    搜索引擎网址网址` https://quark.sm.cn/s?q=Quark ` 使用夸克(神马)搜索引擎搜索“Quark” 示例 效果如图 s?q=后跟搜索词语,必填,不然会被重定向到https://quark.sm.cn/
  • 搜索引擎介绍

    千次阅读 2017-02-06 11:41:51
    自从1994年问世以来,搜索引擎逐渐成为了人们获取Internet信息资源的主要方式,相关搜索引擎网站也逐渐成为Web用户使用Internet时的首选访问站点之一,另外搜索引擎和实时通讯、电子邮件等服务已经成为当今各大门户...
  • 使用Google搜索引擎的10个搜索技巧

    万次阅读 多人点赞 2018-02-11 15:54:35
    献给找得到梯子的小伙伴, 这个技巧百度搜索引擎我没试过 有很多时候,在使用搜索引擎的时候, 搜索结果并不如人意, 下边我介绍几个搜索的小技巧 准确搜索 简单有效的方法就是在关键词上加上双引号, 这样搜索...
  • 搜索引擎技巧

    千次阅读 2018-09-11 09:30:30
    搜索引擎默认的搜索方法是分词搜索,且前面的结果多为各种广告,比如培训。于是一些搜索技巧,可以更准确的找到想要的内容。 以百度为例:右上角设置点开有高级搜索。 可以搜索精确匹配,搜索指定网站站内内容...
  • 360搜索引擎

    千次阅读 2016-07-04 21:02:21
    360搜索引擎为浏览器设置搜索引擎时,搜索引擎的网址填: http://www.so.com/s?q=%s

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 106,995
精华内容 42,798
关键字:

搜索引擎