搜索引擎去广告?SCF来做定制化搜索

在用某度搜索的时候,可能经常遇到这样一个问题:我是谁,我要做什么,以及我做了什么。当然,这只是一句玩笑。现在大部分搜索引擎都有付费推广的内容,我们经常在使用搜索引擎的时候,会被这些付费搜索的东西所干扰,例如,我搜索在线编程这个词条:

可以看到这个词条,在我的一夜屏幕上面,有6个结果,其中5个结果是推广,这其中大部分命中的关键词是“编程”,而不是在线编程,这就会扰乱我们视听,也会给我们带来很不友好的体验,那么我们是否可以通过SCF来做一个简单的工具,来屏蔽掉这些广告呢?

我的回答是当然可以,本教程将会通过SCF+COS来实现一个简单的网页搜索小工具,至于为啥叫搜索小工具,而不是叫去广告搜索小工具,结尾的地方,再详细说。

寻找广告特点

在对列表页代码研究过程中,我们发现,非广告页代码有:

而推广内容,则没有这个内容,所以,我们可以通过正则化,或者XPATH等操作来对目标内容进行识别。

本地实验

本地爬虫编写

根据对页面分析,我们可以得到这样一组参数:

ie=utf-8
pn=10
wd=在线编程

这组参数中,ie是控制编码格式,pn是翻页(偏移量),wd是搜索词汇,对代码编写如下:

import urllib.request
import re
page = 1
args_pn = (page-1) * 10
url = "http://www.baidu.com/s?ie=utf-8&pn=" + str(args_pn) + "&wd=" + urllib.request.quote("在线编程")
req_attr = urllib.request.urlopen(url)
result_list = re.findall("data-tools='(.*?)'",req_attr.read().decode("utf-8"))
for eve in result_list:
    print(eve)

运行结果:

{"title":"代码在线运行 - 在线工具","url":"http://www.baidu.com/link?url=2rtPQM1Yb08uBDUY61IkU3Apr7xkDiP2_zsnZH00HyMsViwBfFR9LJAiXcjqD_EK"}
{"title":"南邮编程在线","url":"http://www.baidu.com/link?url=f_VCURb1ZNe7nVgW3G7IiBBvKDGaeht8SB3hK93jEEddFAtpJC2SGzBoFTs1BLWd"}
{"title":"在线编程 - 编程中国","url":"http://www.baidu.com/link?url=hnYcaMNhRhf5FZfV1vlE5SGS6GjUls4fluKKW52mMIAHwXJd1wey2mOdmtb13ldf"}
{"title":"一个简单的在线集成编程工具 - Anycodes - 随时随地有创意,随时...","url":"http://www.baidu.com/link?url=zMnTtD6cBS_3XT21FMSviS_mzF0T2daHAui6_XC7LAscng2KPt064eej0JqPgfBX"}
{"title":"非常好用的在线编程网站 - yimisiyang - CSDN博客","url":"http://www.baidu.com/link?url=57aywD0Q6WTnl7XKbIHuE7R_FT8mrDBMv8kdi_tomry-X1SrzMnjNVuobcIXjUVnR_ZQrRZQrTHv5uSgfZ-GdR5ud1WK9aOaAKTP-KhFr4e"}
{"title":"十个在线编程网站 _360doc个人图书馆","url":"http://www.baidu.com/link?url=ouVP_VD3EkdRLL-X2bjZNJTdFbVIJgt0jrZL3II0hxj5yT3aTAo56tUA0hUfrCbiZKWcmBNTLKcTiwA7q1bxQJwxdZnKEUzChwQ_nefSJK3"}
{"title":"[转]在线编程刷题网站 - gravely的专栏 - CSDN博客","url":"http://www.baidu.com/link?url=gPgyV9kX2IdYqfifVCn-22OPGWIZqBb3oGfRbl0b_LVRr0MmdgiXoaACk-vRZu6f45q3qsG4X3Zs2wexiex-0K"}
{"title":"c在线编译器,c语言在线解释器,在线编程网站","url":"http://www.baidu.com/link?url=ETluxwW57CgsUIBR7-BKj0bLA65WJr2eipQ5rJOF-1AB3ymP4AGViYXC7AUCrUcW"}
{"title":"8个国外最流行的在线编程练习网站","url":"http://www.baidu.com/link?url=3o0SRtHkYsI2gUjmjsks7dYk00VoljXmVhnkv-CskKh9aiaTAfyDPNa25f4Mj-7AcLrX9eiaObQVChuX5eG0BfWOcE1U-PGsVFWpCFLKSzq"}
{"title":"在线编程_百度百科","url":"http://www.baidu.com/link?url=0uxpDuoQDb_Amx9_6n9PqOpJr10tcRrbU0x-hshhnQNx2mVHyCiDJFsqthe-cEUQNv0AO0KFDYmCZP970sW8mVG02xwha-cNalwKUAogkmpwOQVy5xf9lqKdFROOMqBQ"}

可以看到,这个结果是第一页的搜索结果,他包括了:

首页结果,一对一匹配,并且没有上下的广告内容。证明我们本搜索结果是靠谱的。

搜索页面制作

因为我不是专业前端,我就做一个非常简单的基础页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>新搜索 - Powered by Dfounderliu!</title>
</head>
<body>

<form>
    请输入要搜索的内容:<input type="text"><br>
    <input type="submit">
</form>
<div id="result">
    <ol>
        <li>结果1</li>
        <li>结果2</li>
    </ol>
</div>
</body>
</html>

效果大概这个样子:

发布服务

发布SCF服务

# -*- coding: utf8 -*-
import json
import urllib.request
import re
def main_handler(event, context):
    print(event["pathParameters"]["kw"])
    print(event["pathParameters"]["pn"])
    page = int(event["pathParameters"]["pn"])
    args_pn = (page-1) * 10
    url = "http://www.baidu.com/s?ie=utf-8&pn=" + str(args_pn) + "&wd=" + event["pathParameters"]["kw"]
    req_attr = urllib.request.urlopen(url)
    result_list = re.findall("data-tools='(.*?)'",req_attr.read().decode("utf-8"))
    result = ""
    for eve in result_list:
        temp_json = json.loads(eve)
        temp_result = '<li><a href="%s">%s</a></li>'%(temp_json["url"],temp_json["title"])
        result = result + temp_result
    return result

API网关配置

API测试

静态页面

接下来,对HTML页面进行修改,并且上传到COS。

页面修改为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>新搜索 - Powered by Dfounderliu!</title>
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <script>
        var UTFTranslate = {
            Change: function (pValue) {
                return pValue.replace(/[^\u0000-\u00FF]/g, function ($0) {
                    return escape($0).replace(/(%u)(\w{4})/gi, "&#x$2;")
                });
            },
            ReChange: function (pValue) {
                return unescape(pValue.replace(/&#x/g, '%u').replace(/\\u/g, '%u').replace(/;/g, ''));
            }
        };

        function searchKw() {
            var kw = document.getElementById("kw").value;
            var pn = document.getElementById("pn").value;
            $.get("http://service-rnwcbtai-1256773370.gz.apigw.tencentcs.com/release/list/" + kw + "/" + pn, function (data, status) {
                document.getElementById("result").innerHTML = UTFTranslate.ReChange(data)
            });
        }
    </script>
</head>
<body>
<center><h1>在线搜索工具</h1></center>
<hr>
<center>
    请输入要搜索的内容:<input type="text" id="kw"><br>
    请输入要跳转的页面:<input type="text" id="pn"><br><br>
    <button type="reset">重置</button> &nbsp;&nbsp;|&nbsp;&nbsp;<button onclick="searchKw()">搜索</button>
</center>
<div>
    <ol id="result">
    </ol>
</div>
</body>
</html>

在对象存储中新建存储桶,并上传刚才的html文件:

修改权限为共有读,私有写:

基础配置,开启静态网站:

访问域名测试

总结

至此,我们完成了一个基本的去广告的搜索引擎,有的人可能就疑惑了:

1、本分享主要目的何在

2、这个例子有什么价值

关于上面两个问题,简单回复:

本分享主要想告诉大家,有了SCF和COS以及CDB等产品,作为用户,可以暂时不用CVM了,静态网页,我们可以放在COS中,后端的处理,放在SCF,数据存储到CDB,然后请求页面的时候,COS为我们保证了基本的访问功能和足够的带宽,SCF为我们提供了弹性伸缩的功能,让用户无需考虑流量多少,是否要对CVM扩容等,这样一个过程,可以让我们将更多的精力放到Coding上,想一下,如果传统的一个Python程序员想要做这样一个网页,他需要哪些知识?需要Django/flask等基本框架知识,需要一些Web端的运维,例如怎么配置环境,怎么配置Nginx等操作,现在呢?不需要这些框架知识,你只需要做一个简单的Html,Ajax通信,然后,后端就是我们平常的一个爬虫,也不需要我们写那么多复杂的配置文件,我个人认为这就是一种进步,一种方便;

针对问题2,我是这样想的,这个教程,表面上就是一个SCF运行一个爬虫,接入了COS的静态页面,让我们可以不用CVM也能做出一个网页,但是实际上,这个DEMO意义重大,首先,我只是简单的做了一个页面,完全可以将做一个目标页面预览功能,当你鼠标移动到对应的URL上面,会浮动出现目标网页的样子和你关键词命中的位置,这算不算搜索引擎中的一种创新?除此之外,表面上这个是去掉了百度的广告,但是我们可以拓展啊,我们可将Google,360,搜狗,bing等多家搜索数据进行一个整合,然后统一显示出来,这算不算是一种方便?或者,我们通过多个程序员常去的社区论坛,编写多个爬虫进行整个,实现一个程序员专员搜索?当然,这个只是本例子的一个应用场景,我写这个Demo的更大目的,是想给大家一个思路:

原来做网站可以不用CVM了,可以直接用COS+SCF+CDB来搞定了啊!

各位小伙伴,是不是可以考虑做一个个人小博客,尝尝鲜?

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开发架构二三事

elasticsearch之Roaring Bitmaps的结构

如果你是刚刚接触搜索引擎,你可能会感到奇怪,构建搜索引擎中存储块的一个很重要的原因是搜索引擎能够有效地压缩和快速解码有序的数字集合。 为什么这个很有用?你可能知...

20720
来自专栏达沃斯分享

达沃斯建站告诉你排名与流量之间关系?

  【排名与流量】网站排名和网站流量是互补的和互利的。如果你说你的网站在主页上排名,但没有流量,网站排名做什么?如果你的网站有很多流量,网站就是一个垃圾网站,不...

8030
来自专栏Spark学习技巧

终于有人把 Elasticsearch 原理讲透了!

搜索是现代软件必备的一项基础功能,而 Elasticsearch 就是一款功能强大的开源分布式搜索与数据分析引擎。

33430
来自专栏腾讯云serverless的专栏

Serverless实践系列(一):如何通过SCF与自然语言处理为网站赋能

自然语言的内容有很多,今天本文所介绍的自然语言处理部分是“文本摘要”和“关键词提取”。在做博客的时候,经常会发一些文章,这些文章发出去了,有的很容易被搜索引擎检...

12810
来自专栏SEO优化知识

为什么你的网站会从搜索引擎中消失?

如果你从事SEO行业一段时间了,你是否偶尔会遇到这种情况,网页批量消失,搜索网站标题,完全查询不到结果,甚至输入网址查询都没有结果,那么一定是网站出问题,被搜索...

15040
来自专栏前端下午茶

推介几款 windows 下非常好用的工具

在下工具控一枚,平时会留意收集各种各样给我们生活生产带来便捷的工具,毕竟人生苦短;下面介绍一些 Windows 系统上发现的一些好用的工具,并且将一笔带过主要特...

19820
来自专栏达沃斯分享

【seo标签优化】seo优化师通过标签优化来提升关键词排名

SEOER的日常工作是优化可预测的不确定性。SEO优化是一项非常繁琐的工作,包括内容优化、标题优化、图像优化、链接优化、代码优化、功能优化、标签优化等。而每一部...

8430
来自专栏达沃斯分享

汇总网站主流搜索引擎优化攻略

一个高质量的网站的制作需要SEO优化,无论是日夜更新文章还是优化,这只是一个优化过程,不能达到真正的优化目的。优化的目标是通过搜索引擎向我们展示高质量的内容,而...

3300
来自专栏达沃斯分享

百度判断垃圾外链与作弊外链的方法及处理原则

做网站优化的站长们都知道,搜索引擎优化可以为其带来目标客户转化。想做好搜索引擎优化一般通过站内优化与站外优化的有效结合,站内优化主要通过改进网站质量及代码规范来...

16320
来自专栏相约机器人

NLP研究入门之道:如何通过文献掌握学术动态

本期推送第四篇:如何通过文献掌握学术动态,感兴趣的同学可以直接在Github上阅读。

16140

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励