百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

零基础打造一款属于自己的网页搜索引擎

myzbx 2024-12-01 18:26 13 浏览

前言

在说这个之前,想必大家应该都比较了解搜索引擎了,它就是通过用户在浏览器输入框中输入文本,从而显示一些结果,你觉得哪项符合你要搜索的内容,你就点击哪项。

【一、项目准备】

浏览器:360浏览器

编辑器:Sublime Text 3

插件:Jquery-3.2.1.Min.Js

【二、项目实现】

由于是要实现一个网页搜索引擎,所以我们需要借用网页三剑客(Html+Css+Javascript),然后实现这一功能。

1.打开百度分析网页结构

我们可以先看看百度的搜索引擎:

可以看到,这个搜索框的部分设置,比如关闭自动完成功能。然后我们在随便搜索内容来查看它的变化:

image

可以看到某些我们查询的关键字,于是我们便发现了请求规律:

Bash
https://www.baidu.com/s?+查询字符参数

这就构成了我们的一个完整的get请求,而且这里面有很多关键字参数可以省略掉,只需要保留重要的一部分就好了。于是,经试验,得出如下结论:

Bash
https://www.baidu.com/s?wd=keyword

这个才是请求的接口地址,只需将keyword参数替换为任意搜索关键字即可实现查询并跳转到相应结果页面。

2.编写Html输入框,搜索按钮

看过之前写的Html系列的文章,你将不再对此感到困惑。

<html>
<head>
 <title></title>
 <style type="text/css">
    *{           内外边距初始时为0
       margin:0;    
       padding:0
    }
     input{
        width:300px;
        height:30px
    }
     span{
       position:absolute; 绝对定位
       background-color:red; 背景颜色
       border:1px solid gray; 边框设置
       width:60px;
       height:32px;
       text-align:center 文字位置
    }
    span:hover{ 鼠标悬停时的样式
        background-color:blue
    }
 </style>
</head>
<body>
<input type="text" name="" placeholder="请输入要搜索的内容"> 文本框
<span>search</span> 搜索按钮
</body>
</html>

编写完成后进入浏览器查看,即可看到:

可以看到,已经有点浏览器搜索框的意思了。

3.导入Jquery插件

<script src='jquery-3.2.1.min.js'></script>

4.编写js脚本

这个是重中之重,打开浏览器,network,继续分析:

可以看到搜索结果就在里面。然后打开这个请求的url地址,经过多次实验,发现就只有图中标记的参数有变化:

image.png

所以我们可以得出结论,我们只需要改变这两个值即可。

1).创建删除脚本

于是我先创建一个脚本标签,不用它的时候随时可以清除,避免占用内存,导致页面打开迟缓,性能降低:

var script=document.createElement('script');  创建script的标签
script.id='jsonp';   设置id为jsonp
script.src='https://www.baidu.com/sugrec?prod=pc&cb=getData&wd='+wd;  设置它的地址
document.body.appendChild(script);   添加script元素到body中

然后等它不用了,随时将它删除:

var script=document.createElement('script');  创建script的标签
script.id='jsonp';   设置id为jsonp
script.src='https://www.baidu.com/sugrec?prod=pc&cb=getData&wd='+wd;  设置它的地址
document.body.appendChild(script);   添加script元素到body中

2).生成选项下拉菜单

我们在浏览器可以看到,只要一输入文本,它就会弹出对应的选项让我们选择,那么这是如何办到的了?

<script>
function getlist(wd){    /*获取下拉列表*/
   var script=document.createElement('script');  /*创建script的标签*/
   script.id='jsonp';   /*设置id为jsonp*/
   script.src='https://www.baidu.com/sugrec?prod=pc&cb=getData&wd='+wd; /* 设置它的地址*/
   document.body.appendChild(script);   /*添加script元素到body中*/
}
function getData(data){  /*获取数据*/
     var script=document.querySelector('#jsonp'); /*选择id为jsonp的元素*/
     script.parentNode.removeChild(script);  /*从这个元素的父元素中删除这个元素*/
     $('ol').html('');  /* 设置有序列表的值为空*/
     var da=data.g;   /* 获取搜索的结果*/
  if(da){                     /*结果存在的话就将结果放到li标签中*/
   da.forEach(function(item,index){  
     $('<li><a target="_blank" href ="https://www.baidu.com/s?wd='+item.q+'">'+item.q+'</a></li>').appendTo('ol');
    })
    }
}


     /* 判断键盘是否按下*/
   $('input:text').keyup(function(){
      var wd=$(this).val();  /* 输入框的值*/
      if(wd==''){           /*如果值是空,那么就隐藏,否则显示*/
          $('ol').css('display','none');
          $('ol').css('zIndex',-10);  
      }else{
          $('ol').css('display','block');
       $('ol').css('zIndex',20);
      }
         getlist(wd);
  });
   </script>

可以看到,搜索结果已经出来了,而且有序列表下的"li"标签也都对应的生成了。

3).给选项标记序列

我们可以看到,结果终于出来,但是我想给它个序列号,这样就可以知道搜索结果有多少个了。要设置的标记方式有很多种,可以以数字开头,也可以是大小写字母或者罗马时间。在这里我选择数字,很简单。

终于非常完美的实现了这一功能,是不是很惊艳了,赶快去试下吧。

4).搜索刷新

看到这里相信大家应该都知道这个功能已经算是完成了,我们只需要随便点击哪个li标签都可以访问到相应的页面。于是,我决定添加一个刷新的功能,属于重连服务器的那种刷新:

<span onclick='window.location.reload()'>search</span> 点击后立即刷新

【三、项目总结】

总的来说,对于初学者小白是个很不错的练手项目,希望大家能从中有所收获。

需要源码的小伙伴,后台回复“搜索引擎”四个字即可获取。

****看完本文有收获?请转发分享给更多的人****

想学习更多Python网络爬虫与数据挖掘知识,可前往专业网站:http://pdcfighting.com/

相关推荐

魔兽WLK:P2牌子装机制详解,232装备直接拿,肯瑞托戒指成真BIS

魔兽世界WLK怀旧服P2阶段即将开放,虽然国服只能体验3天时间,但是鉴于绝大部分玩家都认为国服未来还有重新开放的希望,因此在这3天时间内也可以收集一些非常不错的装备,下面胖哥就和大家分享一下P2阶段牌...

PDD旗下的小马是谁,有多强,你们知道吗?

lol国服最强王者第一是谁?曾经的国服大神区艾欧尼亚迎来了一位18岁王者第一,王者1600胜点,堪称国服史上最高,18岁少年登顶LOL国服第一,lol马彦毅个人资料及id段位介绍。1600胜点,国服史...

Vorsteiner Wheels改装蓝色奥迪S5

当你想到奥迪S5,那么你就想象一种结合性能和豪华优雅的运动跑车。由于车辆低调的设计,将很难再叫S5'大胆'或'古怪'。下面的S5,Vorsteiner最近插手但肯定是这两件事情。毫无疑问,最值得关注...

英雄联盟S6排位奖励徽章曝光 质感十足

近日,英雄联盟客户端再次迎来更新,官方曝光了青铜到最强王者8个段位的徽章,看起来非常精致和形象。从无段位的黄色圆环到金色的王者边框,段位越高光泽和款式也更加华丽丰富。不同于以往"展翼"的形象,圆环...

Apple Watch Series 5外观与上代相同,内部构造呢?

集微网消息(文/叶子),苹果今年更新的AppleWatchSeries5在整体外观上延续了上一代的设计,依旧是传统的方形表盘设计,采用40mm/44mm表盘。既然外观没有太大变化,那内部结构呢?...

教你如何连接Gear 三星GALAXY Tab S教程

平板电脑和智能手表是当前两大热门的数码产品,智能穿戴设备也成为今年各大IT厂商下大力气推广的领域,尤其是智能手表异常火热。三星旗下Gear智能手表已经推出了第二代产品,无论是做工品质还是软件功能以及交...

试试这个,你的三星S5/Note4能更快

IT之家(www.ithome.com):试试这个,你的三星S5/Note4能更快想到三星手机,大家脑海中免不了出现Galaxy,这个系列的三星手机颇受欢迎,同时也是三星的旗舰系列。当然这个系列的手机...

Surface Book详细拆解:千万不要自己动手修

微软或许打造了世界上最好的笔记本之一——SurfaceBook,如果你购买了SurfaceBook,我们为你拥有这样一款优秀的笔记本而开心,不过,我们也为你要维修这样一款笔记本而担忧,奉劝你最好不...

蒂升电梯蒂森UCMP轿厢移动测试及复位方法

蒂升电梯蒂森UCMP轿厢移动测试及复位方法UCMP功能测试一、轿厢上行制停距离测试注意空载状态下1、将电梯轿箱停靠在次高层平层位置2、按下主板锁门按钮(MC1∶S4在MZ1、MC2∶S804按钮),将...

18张图!看懂六代三星GALAXY S的改变

从2010年的第一代三星GALAXYS,到2015年的第六代三星GALAXYS6,五年的时间,三星GALAXYS系列经历了六代的更迭,你还能记得第一代产品的样子吗?你还能记得每一代产品的配置吗?...

芯片级电脑维修,需掌握的20个信号,学懂后常见的故障不用求人

很大小白都知道,做技术的每个人都希望把相关的电路与相关的时序全部搞懂,对于大多数的信号名称与作用都不是很了解决,在这里我列出的部分主要的信号名称给大家参考,如果大家觉得有用的话建议大家可以学习与收芯片...

终于还是入了全画幅——松下S5(20-60/50mm)双镜头套装开箱

一、简单开箱视频开箱视频二、购买过程用了一年多的ZV-E10,其实主要用处还是给小孩拍日常记录照片。虽然ZV-E10是一台偏向视频的机器,真正实操体验过后才会知道视频上手难度比拍照大多了,想要观感不...

京张高铁昌平北站项目部开展安全生产警示教育活动

6月20日,中铁六局建安公司安在京张高铁昌平北站项目部开展安全生产警示教育活动。千龙网发千龙网北京6月21日讯(记者李贺)“看了这些案例,有些安全事故还是可以避免的,如果稍加小心,就不会造成工地意外...

深圳男子微博举报高速被恶意别车,视频却让网友炸了:坑老婆?

再过几天就是春节而春运大潮早已经开始每年一到这个时候总有一些小伙伴商量着自驾回家而说到自驾出行驾驶在高速公路上各位司机总有一箩筐的"槽"要吐其他的不多说光是恶意别车这一项就足够令各位老司机们心累了这不...

开车慢也违法?高速路上低速行驶,贵阳交警开出罚单!

平时一直强调的是“杜绝飙车”“小心不要超速!”“开快车很危险”然而也许有不少朋友或者不清楚低速行驶也违法!案例一近日,贵阳交警高速一大队民警巡逻时发现,一辆号牌为贵A8**S5号轻型货车沿兰海高速公路...