零基础打造一款属于自己的网页搜索引擎
【前言】
在说这个之前,想必大家应该都比较了解搜索引擎了,它就是通过用户在浏览器输入框中输入文本,从而显示一些结果,你觉得哪项符合你要搜索的内容,你就点击哪项。
【一、项目准备】
浏览器:360浏览器
编辑器:Sublime Text 3
插件:Jquery-3.2.1.Min.Js
【二、项目实现】
由于是要实现一个网页搜索引擎,所以我们需要借用网页三剑客(Html+Css+Javascript),然后实现这一功能。
1.打开百度分析网页结构
我们可以先看看百度的搜索引擎:
可以看到,这个搜索框的部分设置,比如关闭自动完成功能。然后我们在随便搜索内容来查看它的变化:
可以看到某些我们查询的关键字,于是我们便发现了请求规律:
https://www.baidu.com/s?+查询字符参数
这就构成了我们的一个完整的get请求,而且这里面有很多关键字参数可以省略掉,只需要保留重要的一部分就好了。于是,经试验,得出如下结论:
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地址,经过多次实验,发现就只有图中标记的参数有变化:
所以我们可以得出结论,我们只需要改变这两个值即可。
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> 点击后立即刷新
【三、项目总结】
总的来说,对于初学者小白是个很不错的练手项目,希望大家能从中有所收获。
需要源码的小伙伴,后台回复“搜索引擎”四个字即可获取。
看完本文有收获?请转发分享给更多的人
IT共享之家
入群请在微信后台回复【入群】
------------------- End -------------------
往期精彩文章推荐:
一篇文章教会你用Python抓取抖音app热点数据
一篇文章教会你使用Python定时抓取微博评论
-
手把手教你使用Python抓取QQ音乐数据(第四弹)
想学习更多Python网络爬虫与数据挖掘知识,大家可前往专业网站:http://pdcfighting.com/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
5千字的SpringMVC总结,我觉得你会需要!
思维导图 微信公众号已开启:【java技术爱好者】,还没关注的记得关注哦~ 文章已收录到我的Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 概述 SpringMVC再熟悉不过的框架了,因为现在最火的SpringBoot的内置MVC框架就是SpringMVC。我写这篇文章的动机是想通过回顾总结一下,重新认识SpringMVC,所谓温故而知新嘛。 为了了解SpringMVC,先看一个流程示意图:从流程图中,我们可以看到: 接收前端传过来Request请求。 根据映射路径找到对应的处理器处理请求,处理完成之后返回ModelAndView。 进行视图解析,视图渲染,返回响应结果。 总结就是:参数接收,定义映射路径,页面跳转,返回响应结果。 当然这只是最基本的核心功能,除此之外还可以定义拦截器,全局异常处理,文件上传下载等等。 一、搭建项目 在以前的老项目中,因为还没有SpringBoot,没有自动配置,所以需要使用web.xml文件去定义一个DispatcherServlet。现在互联网应用基本上都使用SpringBoo...
- 下一篇
java安全编码指南之:Mutability可变性
简介 mutable(可变)和immutable(不可变)对象是我们在java程序编写的过程中经常会使用到的。 可变类型对象就是说,对象在创建之后,其内部的数据可能会被修改。所以它的安全性没有保证。 而不可变类型对象就是说,对象一旦创建之后,其内部的数据就不能够被修改,我们可以完全相信这个对象。 虽然mutable对象安全性不够,但是因为其可以被修改,所以会有效的减少对该对象的拷贝。 而immutable对象因为不可改变,所以尝试对该对象的修改都会导致对象的拷贝,从而生成新的对象。 我们最常使用的String就是一个immutable对象。 那么可变性在java的安全编码中的最佳实践是怎么样的呢? 一起来看看吧。 可变对象和不可变对象 知道了可变对象和不可变对象的不同之处之后,我们看一下怎么才能判断这个对象是可变对象还是不可变对象呢? 首先,最简单的一点就是,不可变对象创建之后就不能够被修改,所以不可变对象里面基本上没有setXXX之类的方法,而可变对象提供了setXXX这些可以修改内部变量状态的方法。 看一个例子java.util.Date是一个可变对象,而java.time.Loc...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7