静态站点如何实现站内搜索

作者:Carl Zhang | 更新时间:2017-02-13 | 分类:科技

17.04.17更新:关于SQL注入问题,请看:简单地避免SQL注入式攻击

其实一开始是不想写自己的站内搜索的,想想“百度/360”提供的站内搜索用用就好了,但是自从强制开启https以后,这两个搜索引擎中我的站点收录量直线下滑,导致他们提供的站内搜索直接没内容了。。。但是作为一个网站开发的初学者,整个站点都是静态页面,都不需要数据库,这咋写站内搜索啊!各种查资料,花了两天时间,做了数据库表,同时利用PHP实现了站内搜索。

创建数据库表有很多种方法,一种是自己写,但是我很懒!虽然站点目前的文章不是很多,我还是不想自己写。还有就是利用爬虫生成一张数据库!这个是我喜欢的方法。虽然爬虫也不是这么好操作的。。。

本来我是想自己写一个爬虫的,但是后来发现好像难度有点大,毕竟是零基础。后来上网查的时候发现了一个好玩的东西,叫PySpider的东西。具体的安装方法请看:https://moshuqi.github.io/2016/08/12/Python爬虫-PySpider框架/。教程里面用的是Mac系统,我这里用的是Ubuntu系统,至于Windows能不能用,那就得你们自己去研究了。

安装完以后就可以开始运行了,完全按照上面那个教程来就好了,真的非常的方便。放几张图:

PySpider

PySpider

PySpider

PySpider

上面这张图是最后生成的results,右上角有三个选项,根据你们的数据库来,我下的是中间那个“URL-JSON”,因为这个保存的是txt文档,方便导入到excel中对数据进行删改,有些不需要的就直接可以删掉了,而且它这个保存下来是带引号的,这个实际上没有必要,所以就可以利用excel的替换功能直接删掉。最后另存为CSV格式,因为MySql可以直接上传CSV(UTF-8)格式的数据表。

至于数据库的操作什么的,大家根据自己服务器上的数据库自行研究啦~接下来着重讲一下利用php如何来实现数据库的检索。

本来想,用的不是独立服务器,而是虚拟空间,没法安装中文分词怎么办,但是想想,用MySql的LIKE语句就好了,虽然效率不高,但是我们数据量也不大嘛,还是挺快的。

首先先创建一个form来存放文本输入框和搜索按钮,这个自行研究,不多解释。如下:

form

代码如下:(想换格式的都随意,我只是举个例子而已,我首页的那个是重新写的。)

接下来创建一个search.php(文件名随便,反正是php文件就行,放哪也随你,反正上图中按钮那边的action自己记得改路径好就行了)文件,传入一个变量keyword给php文件。

首先先检测是否有输入keyword,还是说用户只是单纯的想调戏一下这个输入框:

接下来就是读取数据库,代码后面基本都带注释了,自己看吧~

挑几句解释一下:
$sql = "SELECT * FROM `表格名字` WHERE `summary` LIKE '%$keyword%' OR `title` LIKE '%$keyword%'";
这句话就是在“表格名字”这个表格中选取所有列,然后在列summary或者列title中匹配刚刚传入的关键词keyword。

接下来显示匹配到的内容:while为循环,懂编程的反正都看得懂,内容显示用echo语句就可以了。下方为php部分的完整代码。

php是可以和html混编的,所以网页样式什么的,大家都懂了吧~

当数据库中匹配不到用户输入的内容时,可以用下方这个代码来提示用户:

让我们来看看最终的效果(手机端方便截图,电脑端结果是一样的):

效果

效果

(本文为作者原创。转载请注明:转自carlzhang.net

作者注:首页搜索按钮以及返回按钮所用样式来自于:Buttons - 一个高度可定制的按钮(button) CSS 样式库。 本文中的代码,取自众网友的分享,由我整理改良。感谢大家的分享。