首页 文章 精选 留言 我的

精选列表

搜索[零基础],共10007篇文章
优秀的个人博客,低调大师

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

【前言】 在说这个之前,想必大家应该都比较了解搜索引擎了,它就是通过用户在浏览器输入框中输入文本,从而显示一些结果,你觉得哪项符合你要搜索的内容,你就点击哪项。 【一、项目准备】 浏览器: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/

优秀的个人博客,低调大师

Apache Flink 零基础入门(四):客户端操作的 5 种模式

作者:周凯波 1.环境说明 在前面几期的课程里面讲过了 Flink 开发环境的搭建和应用的部署以及运行,今天的课程主要是讲 Flink 的客户端操作。本次讲解以实际操作为主。这次课程是基于社区的 Flink 1.7.2 版本,操作系统是 Mac 系统,浏览器是 Google Chrome 浏览器。有关开发环境的准备和集群的部署,请参考「开发环境搭建和应用的配置、部署及运行」的内容。 2.课程概要 如下图所示,Flink 提供了丰富的客户端操作来提交任务和与任务进行交互,包括 Flink 命令行,Scala Shell,SQL Client,Restful API 和 Web。Flink 首先提供的最重要的是命令行,其次是 SQL Client 用于提交 SQL 任务的运行,还有就是 Scala Shell 提交 Table API 的任务

优秀的个人博客,低调大师

Python零基础学习笔记(三十八)—— 递归方法、栈、队列模拟遍历目录

用递归方法遍历目录: 使用到os模块,所以要先引入os模块 处理文件: 核心是判断文件是否是目录文件,如果是目录文件就进行递归处理,直接将文件名打印出来 下面是文件代码: import os def getAllDir(path, sp = " "): fileList = os.listdir(path) #处理每一个文件 sp += " " for fileName in fileList: #判断是否是路径(用绝对路径) absFliePath = os.path.join(path, fileName) if os.path.isdir(absFliePath): print(sp + "目录:", fileName) #递归调用 getAllDir(absFliePath, sp) else: print(sp + "普通文件", fileName) return fileList getAllDir(r"C:\Users\Administrator\PycharmProjects\untitled\day011") 栈方法: import os def getAllDirDE(path): stack = [] stack.append(path) #处理栈,当栈为空的时候结束循环 while len(stack) != 0: dirPath = stack.pop() fileDir = os.listdir(dirPath) for fileName in fileDir: fileAbsPath = os.path.join(dirPath, fileName) if os.path.isdir(fileAbsPath): print("目录:"+ fileName) stack.append(fileAbsPath) else: print("普通文件:", fileName) getAllDirDE(r"C:\Users\Administrator\PycharmProjects\untitled\day011") 队列方法: import os import collections def getAllDir(path): queue = collections.deque() #进队 queue.append(path) while len(queue) != 0: dirPath = queue.popleft() fileList = os.listdir(dirPath) for fileName in fileList: fileAbsPath = os.path.join(dirPath, fileName) if os.path.isdir(fileAbsPath): print("目录:"+fileName) queue.append(fileAbsPath) else: print("文件:"+fileName) getAllDir(r"C:\Users\Administrator\PycharmProjects\untitled\day011")

优秀的个人博客,低调大师

Python零基础学习代码实践 —— 模拟播放器中的歌词显示

import time musucLrc = ''' [00:00.01]给我你的爱 [00:02.01]林宥嘉,张杰 [00:05.53] 作词:秋风 [00:09.83] 作曲:秋风 [00:14.90] [00:15.65]相信我 在每个生命的路口 [00:20.98]在每个无助的时候 [00:24.75]都有对爱的渴求 [00:30.47]我想把 真的爱向你传达 [00:36.53]无论你在海角天涯 [00:39.52]都能感到 我的牵挂 [00:44.28]请给我你的爱 [00:47.84]请伸出手来传递这信赖 [00:51.54]就在这茫茫人海 [00:53.79]真心的爱 让世界变色彩 [00:59.02]请给我你的爱 [01:02.45]让我们用爱改变着未来 [01:06.10]在每个艰难时刻 [01:08.88]伸你的手 感觉真的爱 [01:14.81]牵着手 让我们静静地感受 [01:19.92]当风雨艰难过去后 [01:23.79]那种美好的自由 [01:29.29]我们都曾 错过幸福的意义 [01:34.77]只希望我还来得及 [01:38.45]去告诉你 真心爱你 [01:43.15]请给我你的爱 [01:47.39]请伸出手来传递这信赖 [01:50.42]就在这茫茫人海 [01:53.18]真心的爱 让世界变色彩 [01:57.72]请给我你的爱 [02:01.53]让我们用爱改变着未来 [02:05.19]在每个艰难时刻 [02:07.86]伸你的手 感觉真的爱 [02:14.27]我不再想要错过 [02:15.81]你的每个热切期待 [02:19.18]用爱 在明天到来之前 [02:22.56]向你大声说出爱~~爱 [02:29.44]请给我你的爱 [02:32.65]请伸出手来传递这信赖 [02:36.33]就在这茫茫人海 [02:39.08]真心的爱 让世界变色彩 [02:43.89]请给我你的爱 [02:47.56]让我们用爱改变着未来 [02:51.05]在每个艰难时刻 [02:53.96]伸你的手 感觉真的爱 [03:01.38]给我你的爱~~ ''' #将数据分解存储到字典里 lrcDict = {} musicList = musucLrc.splitlines() for lrcLine in musicList: #runCount = lrcLine.count(":") lrcLineList = lrcLine.split("]") for index in range(len(lrcLineList) - 1): timeStr = lrcLineList[index][1:] #print(timeStr) timeList = timeStr.split(":") timea = float(timeList[0]) * 60 + float(timeList[1]) #print(timea) lrcDict[timea] = lrcLineList[-1] #print(lrcDict) allTimeList = [] for t in lrcDict: allTimeList.append(t) allTimeList.sort() #print(allTimeList) #在字典里将数据调出来然后按照时间间隔将数据显示出来 #效果是一行一行的刷新 getTime = 0 while 1: for n in range(len(allTimeList)): tempTime = allTimeList[n] if getTime < tempTime: break lrc = lrcDict.get(allTimeList[n]) if lrc == None: pass else: print(lrc) if n in range(len(allTimeList) - 1): time.sleep(allTimeList[n + 1] - allTimeList[n]) getTime += (allTimeList[n + 1] - allTimeList[n]) else: break

优秀的个人博客,低调大师

零基础做出全栈应用:我的第一个小程序

### 作为一个完全不懂代码的运营,我一直觉得 "做应用" 是程序员的事。直到用 WorkBuddy 的全栈应用生成能力,我才发现门槛被彻底拉低了。 我说想做一个 "团队活动投票小程序",它自动完成了从前端页面到后端的一整套:自带云数据库存数据、自带用户注册登录、还接入了 AI 调用能力。更关键的是免部署 —— 生成后直接发布就能用,不用买服务器、不用配环境、不用写一行代码,发布后还能持续迭代更新。 整个过程中它会像老师一样引导我:先做什么、在哪里配置、怎么测试,遇到报错还能让我截图给它排查,一步步帮我定位问题。从想法到上线,我只花了不到一个下午,在手机上用上自己做的应用时,成就感真的拉满。 WorkBuddy 把 "应用" 从代码的世界带到了普通人的桌面。这是我最看好它的地方,也让 "人人都是开发者" 第一次变得这么具体。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册