搜索引擎去廣告?SCF來作定製化搜索

在用某度搜索的時候,可能常常遇到這樣一個問題:我是誰,我要作什麼,以及我作了什麼。固然,這只是一句玩笑。如今大部分搜索引擎都有付費推廣的內容,咱們常常在使用搜索引擎的時候,會被這些付費搜索的東西所幹擾,例如,我搜索在線編程這個詞條:html

能夠看到這個詞條,在個人一晚上屏幕上面,有6個結果,其中5個結果是推廣,這其中大部分命中的關鍵詞是「編程」,而不是在線編程,這就會擾亂咱們視聽,也會給咱們帶來很不友好的體驗,那麼咱們是否能夠經過SCF來作一個簡單的工具,來屏蔽掉這些廣告呢?前端

個人回答是固然能夠,本教程將會經過SCF+COS來實現一個簡單的網頁搜索小工具,至於爲啥叫搜索小工具,而不是叫去廣告搜索小工具,結尾的地方,再詳細說。jquery

尋找廣告特色

在對列表頁代碼研究過程當中,咱們發現,非廣告頁代碼有:程序員

而推廣內容,則沒有這個內容,因此,咱們能夠經過正則化,或者XPATH等操做來對目標內容進行識別。編程

本地實驗

本地爬蟲編寫

根據對頁面分析,咱們能夠獲得這樣一組參數:json

ie=utf-8
pn=10
wd=在線編程複製代碼

這組參數中,ie是控制編碼格式,pn是翻頁(偏移量),wd是搜索詞彙,對代碼編寫以下:flask

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"}
複製代碼

能夠看到,這個結果是第一頁的搜索結果,他包括了:api

首頁結果,一對一匹配,而且沒有上下的廣告內容。證實咱們本搜索結果是靠譜的。bash

搜索頁面製做

由於我不是專業前端,我就作一個很是簡單的基礎頁面:

<!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文件:

修改權限爲共有讀,私有寫:

基礎配置,開啓靜態網站:

訪問域名測試

總結

至此,咱們完成了一個基本的去廣告的搜索引擎,有的人可能就疑惑了:

一、本分享主要目的何在

二、這個例子有什麼價值

關於上面兩個問題,簡單回覆:

本分享主要想告訴你們,有了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來搞定了啊!

各位小夥伴,是否是能夠考慮作一個我的小博客,嚐嚐鮮?

相關文章
相關標籤/搜索