在说这个以前,想必你们应该都比较了解搜索引擎了,它就是经过用户在浏览器输入框中输入文本,从而显示一些结果,你以为哪项符合你要搜索的内容,你就点击哪项。css
浏览器:360浏览器html
编辑器:Sublime Text 3jquery
插件:Jquery-3.2.1.Min.Jsjson
因为是要实现一个网页搜索引擎,因此咱们须要借用网页三剑客(Html+Css+Javascript),而后实现这一功能。浏览器
咱们能够先看看百度的搜索引擎:服务器
能够看到,这个搜索框的部分设置,好比关闭自动完成功能。而后咱们在随便搜索内容来查看它的变化:网络
能够看到某些咱们查询的关键字,因而咱们便发现了请求规律:app
https://www.baidu.com/s?+查询字符参数
这就构成了咱们的一个完整的get请求,并且这里面有不少关键字参数能够省略掉,只须要保留重要的一部分就行了。因而,经试验,得出以下结论:编辑器
https://www.baidu.com/s?wd=keyword
这个才是请求的接口地址,只需将keyword参数替换为任意搜索关键字便可实现查询并跳转到相应结果页面。性能
看过以前写的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>
编写完成后进入浏览器查看,便可看到:
能够看到,已经有点浏览器搜索框的意思了。
<script src='jquery-3.2.1.min.js'></script>
这个是重中之重,打开浏览器,network,继续分析:
能够看到搜索结果就在里面。而后打开这个请求的url地址,通过屡次实验,发现就只有图中标记的参数有变化:
因此咱们能够得出结论,咱们只须要改变这两个值便可。
因而我先建立一个脚本标签,不用它的时候随时能够清除,避免占用内存,致使页面打开迟缓,性能下降:
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.querySelector('#jsonp'); 选择id为jsonp的元素 script.parentNode.removeChild(script); 从这个元素的父元素中删除这个元素
咱们在浏览器能够看到,只要一输入文本,它就会弹出对应的选项让咱们选择,那么这是如何办到的了?
<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"标签也都对应的生成了。
咱们能够看到,结果终于出来,可是我想给它个序列号,这样就能够知道搜索结果有多少个了。要设置的标记方式有不少种,能够以数字开头,也能够是大小写字母或者罗马时间。在这里我选择数字,很简单。
终于很是完美的实现了这一功能,是否是很惊艳了,赶快去试下吧。
看到这里相信你们应该都知道这个功能已经算是完成了,咱们只须要随便点击哪一个li标签均可以访问到相应的页面。因而,我决定添加一个刷新的功能,属于重连服务器的那种刷新:
<span onclick='window.location.reload()'>search</span> 点击后当即刷新
总的来讲,对于初学者小白是个很不错的练手项目,但愿你们能从中有所收获。
须要源码的小伙伴,后台回复“搜索引擎”四个字便可获取。
想学习更多Python网络爬虫与数据挖掘知识,可前往专业网站:http://pdcfighting.com/