在云服务器ECS上用Python写一个搜索引擎

这篇具有很好参考价值的文章主要介绍了在云服务器ECS上用Python写一个搜索引擎。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、场景介绍

一台阿里云ECS云服务器就是一台带有公网IP地址的计算机。用户可以通过远程登录使用这台计算机;同时,由于带有公网IP,用户在ECS云服务器上部署的网站、APP、小程序等,可以被其他人通过互联网访问。

本实验应用PageRank算法,使用Python,在一台ECS云服务器上搭建了一个简易版的搜索引擎。可以用单个英文词语作为搜索词,搜索相关的网页。实现的效果如下图所示。在搜索框中,输入搜索词,例如"universe",单击搜索,搜索引擎即会按相关度从高到低,列出相关的网页。在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

二、搜索引擎的组成

本案例中的搜索引擎由两部分组成:网页的爬取及排序,以及用户使用搜索引擎进行搜索。

2.1 网页的爬取及排序

首先,搜索引擎需要从互联网上爬取网页。爬取到网页后,做两方面的工作:

  1. 获取网页间的超链接关系,使用PageRank算法对网页进行排序。PageRank算法的基本原理是,被引用越多的网页(即获取的超链接越多),重要性越高,类似于被引用次数越多的学术论文重要性越高的原理。对算法的说明可参考下面这本书:Google’s PageRank and Beyond: The Science of Search Engine Rankings。

  2. 编制搜索词的索引。从网页中提取词语,分析这些词语出现在哪些网页。

2.2 用户使用搜索引擎进行搜索

用户搜索某个词(例如 computer)时,搜索引擎首先从搜索词的索引中,找到这个词出现在哪些网页。然后,获取这些网页的PageRank值,按照值的大小,由高至低排序,呈现给用户。

本案例中,数据存储做了简化处理,采用了txt文档存储数据,没有使用数据库。Web页面采用Streamlit生成。在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

三、操作步骤

3.1 环境准备

  1. 创建用于运行搜索引擎的ECS实例。ECS实例建议配置如下:

    • 实例规格:选择2vCPU 2 GiB的实例规格

    • 系统盘:40 GiB

    • 公网IP:选中分配公网 IPv4 地址并选择1M。

    • 镜像:选择Linux系统的镜像,本实验中选取Alibaba Cloud Linux,版本为Alibaba Cloud Linux 3.2104 LTS 64位。当您选择其他Linux系统时,运行命令与本文有所不同。

  2. 实例安全组的入方向规则,放行22、80、443、8501端口(Streamlit默认使用8501端口)。

3.2 安装Anaconda

Anaconda中包含了Python、NumPy等本项目中需要的依赖项。

  1. 远程连接ECS实例。

  2. 更新操作系统。

    sudo yum update -y
    sudo yum upgrade -y
    
  3. 下载Anaconda安装包。

    wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
    
  4. 安装Anaconda。

    bash Anaconda3-2023.09-0-Linux-x86_64.sh
    
    1. 当出现下图所示信息时,单击Enter,继续安装过程。

      在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

    2. 出现下面的界面后,连续多次单击Enter。**在这里需要注意,此处安装软件是在显示它的授权协议,让用户阅读。不要一直按住Enter,而是建议一下一下地点击Enter,后续会出现****Do you accept the license terms?**的提示(紧接着一个步骤)。默认的选项是no,如果一直按住Enter,安装过程会中止。在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

    3. 出现Do you accept the license terms? [yes|no]时,输入yes,单击Enter继续安装。

      在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

    4. 出现如下提示,单击Enter继续,等待Anaconda完成安装。

      在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

    5. 出现如下提示时,输入yes,单击Enter继续安装。

      在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

      出现如下图所示信息时,说明Anaconda已安装完成。

      在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

  5. 单击页面右上角的在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎图标,打开一个新终端。

    当出现(base)字样,表示Anaconda已启动。

    说明

    在实际开发过程中,通常需要通过conda安装虚拟环境,在虚拟环境中继续后续操作。本实验中略去此步骤。

    在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

3.3 安装Streamlit

Streamlit用于展示Web页面。

pip install streamlit

3.4 下载搜索引擎代码

搜索引擎能搜索到哪些网页,取决于搜索引擎通过爬虫获得了哪些网页。本实验中,以Introduction to Programming in Python网页为起始网页,爬取了总计322个网页。因此,搜索的结果限于这322个网页。用户可以通过在web_graph.py中添加新的起始网页,爬取新的网页。

  1. 下载搜索引擎代码压缩包。

    wget https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20231011/uhsy/search_engine_demo_aliyun.zip
    
  2. 解压缩搜索引擎代码压缩包。

    yum install unzip
    unzip search_engine_demo_aliyun.zip
    
  3. 切换到search_engine_demo_aliyun目录。

    cd search_engine_demo_aliyun
    

    search_engine_demo_aliyun目录下的文件结构如下所示:

    在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

    • **search.py:**运行该程序,可以启动搜索引擎网页,供用户使用。

    • pageranking:包含爬取网页、计算PageRank值、生成词的索引所需要的程序。

      • web_graph.py:爬取网页,生成网页间的关系图(graph);

      • page_indexer.py:对使用web_graph.py爬取到的网页做编号,以方便使用PageRank算法时做矩阵运算;

      • pagerank.py:使用PageRank算法计算网页的重要性;

      • word_indexer.py:对爬取到的网页中的词进行分析,确定每一个词分别出现在了哪些网页;

      • get_html.py:获取网页的hmtl内容,web_graph.py和word_indexer.py都会调用这个程序;

      • setup.py:用于同时运行web_graph.py, page_indexer.py, pagerank.py, word_indexer.py,并存储数据。

    • **data:**用于存储运行./pageranking/setup.py后生成的数据。

      • web_graph.txt: 用于存储网页间的关联关系,本质上是一个有向图。采用字典的方式存储数据,key为一个网页,value为这个网页上超链接指向的网页组成的数组;

      • page_indexer.txt: 爬取到的网页的编号。这里的网页经过了去重。采用字典的方式存储数据,key为一个网页,value为网页的编号;

      • pagerank_of_pages.txt:采用PageRank算法计算出的各个网页的PageRank值,即重要性。采用字典的方式存储数据,key为一个网页,value为这个网页的PageRank值;

      • word_index.txt:词的索引,即词会出现在哪些网页。采用字典的方式存储数据,key为一个词,value为出现了这个词的网页的数组。

3.5 运行搜索引擎

  1. 启动搜索引擎。

    streamlit run search.py
    

    当显示如下信息时,说明Streamlit已启动。

    在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

  2. 复制External URL显示的公网IP地址输入到浏览器,就可以访问并使用搜索引擎。在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

  3. 修改网页的爬取及排序。

    本实验中,以Introduction to Programming in Python这个网页为起始网页,爬取了总计322个网页。因此,搜索的结果限于这322个网页。

    您可以通过在web_graph.py中添加新的起始网页,爬取新的网页。例如,如果要增加以Algorithms这个网页为起始网页,做爬虫,让搜索引擎能搜到更多的网页。可以按如下步骤操作:

    1. 切换到pageranking目录。

      cd /root/search_engine_demo_aliyun/pageranking
      
    2. 打开web_graph.py文件。

      vim web_graph.py
      
    3. i键进入编辑模式。

    4. 在seed_urls数组中,增加https://algs4.cs.princeton.edu/home/

      在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

    5. Esc键,输入**:wq**,按Enter键,输入并保存文件。

  4. 执行如下命令,开始更新data文件夹中的数据。

    其中,web_graph.txt、word_index.txt的生成需要较长的时间(约10分钟)。运行完毕后,搜索引擎即可覆盖更多的网页。

    python setup.py
    

四、常见问题

4.1 运行setup.py时可能的问题

运行python setup.py做新的爬虫任务时,耗时较长,任务可能被中断。如果被中断,可以尝试重新运行。

4.2 如何使搜索引擎一直在线

在云服务器ECS上运行搜索引擎时,如果远程连接中断,search.py文件也会中止运行,导致搜索引擎无法使用。可以采用screen命令,解决这个问题。

  1. 执行ctrl+z终止search.py程序。

  2. 查看占用8501端口的进程。

    lsof -i:8501
    

    例如,占用该端口的PID位41644,输入下列命令中止该进程,释放8501端口。在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

    kill -9 41644
    
  3. 执行以下命令,使用screen新建一个窗口。

    screen -S search
    

    在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎

  4. 在新生成的窗口里,运行下列命令,启动搜索引擎。

    streamlit run search.py
    
  5. 按住ctrl+A,再按D,出现下列提示(detached from …)后,说明detach成功。

    这样,即使远程连接中断、退出登录ECS实例,搜索引擎仍然将正常工作。

    在云服务器ECS上用Python写一个搜索引擎,技术流Clip,服务器,python,搜索引擎文章来源地址https://www.toymoban.com/news/detail-777892.html

到了这里,关于在云服务器ECS上用Python写一个搜索引擎的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在云服务器中云磁盘如何挂载

    由于轻量级服务器不能够直接扩容,所以就采用云磁盘挂载的方式来扩大储存空间的, 以下以腾讯云服务器作为演示!!! 1、同区创建云硬盘 2、更多-挂载(挂载到哪个实例)-开始挂载-----------------------------状态会变为挂载 3、来到终端内进行“真实的挂载” 以下/dev/vdb的

    2024年02月12日
    浏览(54)
  • 在云服务器上安装Jenkins

    说明:Jenkins是一个部署项目的平台,通过Jenkins可以省去从项目开发–部署项目之间的所有流程,做到代码提交即上线。本文介绍在云服务CentOS上安装Jenkins。 安装Jenkins之前,先要在云服务上安装JDK、Maven、Git,安装请参考JDK安装,Maven安装,Git安装。 JDK安装的文章是安装JD

    2024年02月12日
    浏览(45)
  • 在云服务器上部署docker

    目录  云服务器的使用场景  登录云服务  安装部署docker环境  docker常用命令 云服务器位于云盘算产业金字塔底层,是支持云盘算应用的基础设施平台;通过集群、虚拟化、智能热迁徙等一系列手艺应用把成千上万台自力服务器整合成一个大的资源池,和带宽、IP等互联网资源

    2024年02月07日
    浏览(42)
  • ECS-入门-购买阿里云ECS服务器

    本文章属个人学习整理的对应笔记,学习内容来阿里云的学习平台,有兴趣的小朋友下面有对应链接 弹性计算Clouder认证:ECS快速入门_阿里云认证_阿里云培训中心-阿里云 1.首先进入阿里云官网 选择产品-计算-云服务器ECS 2.选择购买 3.规格参数 1.首先我们选择自定义购买 付费

    2024年02月21日
    浏览(46)
  • NTP时钟同步服务器(卫星授时服务)在云计算数据机房的应用

    NTP时钟同步服务器(卫星授时服务)在云计算数据机房的应用 NTP时钟同步服务器(卫星授时服务)在云计算数据机房的应用 1、云计算定义与特点 云计算概念定义 现阶段广为被接受的定义来自于每个国家标准与技术研究院(NIST),如下: 云计算是一种按需交付的资源模式,

    2024年02月04日
    浏览(43)
  • 在云服务器中部署stable diffusion webui教程。

    要在云服务器中部署Stable Diffusion WebUI,你可以按照以下步骤进行操作: 准备环境: 获取一台云服务器,例如使用云服务提供商(如AWS、Azure、阿里云等)创建一个虚拟机实例。 确保服务器的操作系统满足Stable Diffusion WebUI的要求。通常,Linux发行版如Ubuntu或CentOS是常见选择。

    2024年02月13日
    浏览(51)
  • 【云服务器 ECS 实战】云服务器新手指南(配置+使用详解)

    谈起云计算,相信大家都不陌生,可以说它已经颠覆了我们生活中的很多应用场景,如虚拟化办公、物联网、虚拟 IDC 以及日常的生活娱乐、金融、教育等多个行业领域都享受到了来自“云”技术的红利,毫不夸张的说:“云”已经渗透到了我们日常生活中的各个领域。 那么

    2024年02月03日
    浏览(46)
  • 阿里云轻量应用服务器和ECS云服务器区别(官方文档)

    阿里云轻量应用服务器和ECS云服务器有啥区别?轻量应用服务器是轻量级服务器,轻量适合个人开发者或中小企业使用,清理使用简单、可视化运维更容易上手;ECS云服务器专业级服务器,适合企业级应用,通用型、计算型、大数据型、弹性裸金属服务器、GPU/FPGA/NPU异构计算

    2024年02月21日
    浏览(54)
  • 【云服务器 ECS 实战】ECS 快照&镜像的原理及用法详解

    1. 阿里云 ECS 快照概述 阿里云快照服务支持所有类型的云盘,是一种低成本、便捷高效的数据备份手段,也可以用于创建镜像或容灾、分发数据副本等。对于某一个重要的磁盘数据,当我们想要给他做一个备份时,就需要用到快照。此外在进行磁盘备份之后,也有助于我们随

    2024年02月03日
    浏览(37)
  • 阿里云服务器ECS云盘扩容

    对于云服务器,相信大多数开发的铁子们都玩过,但是云盘爆满的情况,对于新手或者没有自己运营业务的铁子们,平台给的初始容量也不算小,所以这种情况碰到的概率还是比较小。由于我的服务器应用的复杂度随着业务的发展逐渐增加,今天磁盘满了,导致几个服务直接

    2024年02月06日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包