大家好,我又來了,我是銀牌廚師豆腐!
我們總是在爬啊爬,爬到了數據難道只是為了做一個詞云嗎?
當然不!這次我就利用flask為大家呈現一道小菜。
Flask是中一個輕量級web框架,相對于其他web框架來說簡單,適合小白練手。使用Flask+爬蟲python爬取app數據庫,教大家如何實時展示自己爬下來的數據到網頁上。
先給大家展示一下這個丑丑的網頁 ↓
(給個面子python爬取app數據庫,別笑
)
演示三個功能
整個流程就是簡單的三步:
爬蟲部分:
這次爬蟲主要利用多線程方式爬取新浪新聞+網易新聞所有欄目新聞信息。
一共14個欄目,兩個網站的頁面信息都是通過ajax加載完成的,請求對應的欄目鏈接后,返回的字符串是這樣的,仔細觀察會發現我們要看的新聞內容被包含在里面
圖2
是一個列表樣式,
這時候我們就可以用eval函數將這個字符串處理成一個列表格式
def?get_wy_teach():
????url?=?'https://tech.163.com/special/00097UHL/tech_datalist.js?callback=data_callback'
????headers?=?{
????????'User-Agent':?'Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/80.0.3987.163?Safari/537.36'
????}
????res?=?requests.get(url=url,?headers=headers)
????#?print(res.text)
????data?=?res.text
????data?=?eval(data.replace('data_callback(','').replace(data[-1],""))
然后下面就可以循環提取出新聞內容了,最后一步就是存儲到我們的mysql數據庫中
當我們建立好14個欄目的爬蟲后,再來編寫一個主文件main,利用簡單的多線程方法啟動14個文件并行爬取14個欄目的新聞
def?multi_thread():
????t1?=?threading.Thread(target=xzg)
????t2?=?threading.Thread(target=xz)
????#......
????
????t13?=?threading.Thread(target=wy_hua)
????t14?=?threading.Thread(target=wy_chn)
????t1.start()
????t2.start()
????
????#......
????
????t13.start()
????t14.start()
對了,爬蟲之后我們還是做了詞云的,哈哈哈
點擊生成今日熱點新聞詞云,靜待片刻
今日熱點詞匯flask部分:
輔材處理完成,現在我們開始做主菜部分。
from?flask?import?Flask,render_template,request
#注冊創建app應用,_name_是python預定義變量
app?=?Flask(__name__)
#跨域請求cors
from?flask_cors?import?CORS
CORS(app,?resources=r'/*')
#啟動爬蟲頁
@app.route('/test',?methods=['GET'])
def?mytest():
????main.multi_thread()
????time.sleep(10)
????return?'爬取完成~'
if?__name__?==?'__main__':
????app.run(debug=True,port=5000)
這樣一個個小小的Flask頁面接口就完成了
接口寫好了,下面我們來搞個h5頁面,我們首先來建立一個簡單hmtl文件(舉例新聞推薦頁面)
<html?lang="en">
<head>
????<meta?charset="UTF-8">
????<title>Titletitle>
head>
<body>
<div?align=""?class="img">
????<h1>今日新聞推薦h1>
????<div?class="img">
????????<ul>
??????????<li>?<a?href="{{data[0][1]}}">{{data[0][0]}}a>li>
??????????<li>?<a?href="{{data[1][1]}}">{{data[1][0]}}a>li>
??????????<li>?<a?href="{{data[2][1]}}">{{data[2][0]}}a>li>
??????????<li>?<a?href="{{data[3][1]}}">{{data[3][0]}}a>li>
??????????<li>?<a?href="{{data[4][1]}}">{{data[4][0]}}a>li>
??????????<li>?<a?href="{{data[5][1]}}">{{data[5][0]}}a>li>
??????????<li>?<a?href="{{data[6][1]}}">{{data[6][0]}}a>li>
??????????<li>?<a?href="{{data[7][1]}}">{{data[7][0]}}a>li>
??????????<li>?<a?href="{{data[8][1]}}">{{data[8][0]}}a>li>
??????????<li>?<a?href="{{data[9][1]}}">{{data[9][0]}}a>li>
??????????<li>?<a?href="{{data[10][1]}}">{{data[10][0]}}a>li>
??????????<li>?<a?href="{{data[11][1]}}">{{data[11][0]}}a>li>
??????????<li>?<a?href="{{data[12][1]}}">{{data[12][0]}}a>li>
??????????<li>?<a?href="{{data[13][1]}}">{{data[13][0]}}a>li>
??????????<li>?<a?href="{{data[14][1]}}">{{data[14][0]}}a>li>
??????????<li>?<a?href="{{data[15][1]}}">{{data[15][0]}}a>li>
??????????<li>?<a?href="{{data[16][1]}}">{{data[16][0]}}a>li>
??????????<li>?<a?href="{{data[17][1]}}">{{data[17][0]}}a>li>
??????????<li>?<a?href="{{data[18][1]}}">{{data[18][0]}}a>li>
??????????<li>?<a?href="{{data[19][1]}}">{{data[19][0]}}a>li>
????????ul>
????div>
????<div?class="logo-img">
????div>
div>
我們將從數據庫中獲取到的數據傳入到h5文件
#新聞推薦
@app.route('/news')
def?news_list():
????data?=?get_mysql()
????
????return?render_template('index4.html',?data=data)
復制粘貼20個li方便大家理解我設置今日推薦新聞條數是20條,
你也可以通過自己喜愛算法從數據庫選擇20條新聞推送的網頁
刷新新聞與查看新聞
到這,一個簡陋的 Flask 網站就完成了,是不是很簡單。
Flask 是個小巧、靈活的web框架,可以讓自己決定定制哪些功能,靈活定制組件,非常適用于小型網站。
結語:(網站想要漂亮,還是要學一下h5,別學我)
微軟于年初推出了自己的教程,我們將其漢化提供給大家,歡迎大家收藏關注哦~(已經漢化完成的20集,我們日更1集,未完成部分我們盡快更新)