15行Python 仿百度搜索引擎
阿新 • • 發佈:2018-03-24
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{ positionindex.html: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>
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 仿百度搜索引擎