1. 程式人生 > >15行Python 仿百度搜索引擎

15行Python 仿百度搜索引擎

name 3D ebe 結果 open author sta def images

開發工具:PyCharm

開發環境:python3.6 + flask + requests

開發流程:

1. 啟動一個web服務

from flask import Flask
app = Flask(__name__)
if __name__ == __main__:
    app.run(host=127.0.0.1, port=6666)

2. 增加app.route裝飾器

from flask import Flask

app = Flask(__name__)

@app.route(/)
def index():
    
return Hello World if __name__ == __main__: app.run(host=127.0.0.1, port=5000)

3. 增加index.html

技術分享圖片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>仿百度搜索</title>
    <style type="text/css">
        .align-center{
        position
:fixed;left:30%;top:30%;margin-left:width/2;margin-top:height/2; } </style> </head> <body> <form action="/s" method="get"> <div class="align-center"> <input type="search" name="key"> <input type="submit" value="搜索"><br>
</div> </form> </body> </html>
index.html

4. 增加 render_template

from flask import Flask
from flask import render_template
app = Flask(__name__)

@app.route(/)
def index():
    return render_template(index.html)
if __name__ == __main__:
    app.run(host=127.0.0.1, port=5000)

5. 增加返回結果

@app.route(/s)
def search():
    return Hello World

6. spider.py

import requests

def getBdMsg(keyword):
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"}
    res = requests.get(https://www.baidu.com/s?wd={}.format(keyword), headers = headers).text
    return res

7. 獲取搜索框關鍵字,通過爬蟲程序搜索,獲得百度搜索結果

from flask import Flask
from flask import render_template
from flask import request
from spider import getBdMsg
app = Flask(__name__)

@app.route(/)
def index():
    return render_template(index.html)

@app.route(/s)
def search():
    keyword = request.args.get("key")
    text = getBdMsg(keyword)
    return text

if __name__ == __main__:
    app.run(host=127.0.0.1, port=5000)

8. 修改spider.py的返回結果,通過鏈式replace(),替換百度圖標和“百度一下”

return res.replace(//www.baidu.com/img/baidu_jgylogo3.gif,static/images/google.png).replace(百度一下, Google)

技術分享圖片技術分享圖片

附完整源碼:

技術分享圖片
# -*- coding: utf-8 -*-
# @Time    : 2018/3/19 12:46
# @Author  : TanRong
# @Software: PyCharm
# @File    : search.py

from flask import Flask
from flask import render_template
from spider import getBdMsg
from flask import request

# Flask(__name__).run()
app = Flask(__name__)

#app.route裝飾器
@app.route(/)
def index():
    return render_template(index.html)

@app.route(/s)
def search():
    keyword = request.args.get(key)
    text = getBdMsg(keyword)
    return text

if __name__ == __main__:
    app.run()
search.py 技術分享圖片
# -*- coding: utf-8 -*-
# @Time    : 2018/3/21 18:07
# @Author  : TanRong
# @Software: PyCharm
# @File    : spider.py

import requests

def getBdMsg(keyword):
    # 必須加上請求頭,這樣才是瀏覽器請求,不然無返回結果
    # F12 - NetWork - Requeset Headers - UserAgent
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"}
    res = requests.get(https://www.baidu.com/s?wd={}.format(keyword), headers = headers).text
    return res.replace(//www.baidu.com/img/baidu_jgylogo3.gif,static/images/google.png).replace(百度一下,Google).replace(百度,Google) #鏈式replace()

if __name__ == __main__:
    getBdMsg(風景)
spider.py 技術分享圖片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>仿百度搜索</title>
    <style type="text/css">
        .align-center{
        position:fixed;left:30%;top:30%;margin-left:width/2;margin-top:height/2;
        }
    </style>
</head>
<body>
    <form action="/s" method="get">
        <div class="align-center">
            <input type="search" name="key"> <input type="submit" value="搜索"><br>
        </div>
    </form>
</body>
</html>
index.html

15行Python 仿百度搜索引擎