點擊上方“Python爬蟲與數據挖掘”,進行關注
回覆“書籍”即可獲贈Python從入門到進階共10本電子書
大家好,我又來了,我是銀牌廚師豆腐!
我們總是在爬啊爬,爬到了數據難道只是爲了做一個詞雲嗎?
當然不!這次我就利用flask爲大家呈現一道小菜。
Flask是python中一個輕量級web框架,相對於其他web框架來說簡單,適合小白練手。使用Flask+爬蟲,教大家如何實時展示自己爬下來的數據到網頁上。
先給大家展示一下這個醜醜的網頁 ↓
(給個面子,別笑)
整個流程就是簡單的三步:
-
爬取數據 -
利用實時爬取數據生成詞雲 -
利用熱點推薦新聞
爬蟲部分:
這次爬蟲主要利用多線程方式爬取新浪新聞+網易新聞所有欄目新聞信息。
一共14個欄目,兩個網站的頁面信息都是通過ajax加載完成的,請求對應的欄目鏈接後,返回的字符串是這樣的,仔細觀察會發現我們要看的新聞內容被包含在data_callback
裏面
是一個列表樣式,
這時候我們就可以用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)
-
render_template
, 用於渲染我們的h5頁面 -
app = Flask(__name__)
,這個是flask的必寫項,必須先定義模塊名,用於設置路由路徑(轉接4) -
cors
跨域請求,一般用於ajax請求,CORS(app, resources=r'/*')
定義app路由中所有路徑都適用於跨域請求 -
@app.route('/test')
,當你想使用mytest功能時候,設置了/test作用該函數的訪問路徑。例:http://49.233.23.230:5000/test -
app.run(debug=True,port=5000)
,最後就是指定監聽地址端口爲 5000,debug=True
是調試環境,用於生產環境時可更改爲Flase。
這樣一個個小小的Flask頁面接口就完成了
接口寫好了,下面我們來搞個h5頁面,我們首先來建立一個簡單hmtl文件(舉例新聞推薦頁面)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</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,別學我)
------------------- End -------------------
往期精彩文章推薦:
歡迎大家點贊,留言,轉發,轉載,感謝大家的相伴與支持
想加入Python學習羣請在後臺回覆【入羣】
萬水千山總是情,點個【在看】行不行
/今日留言主題/
隨便說一兩句吧~~
本文分享自微信公衆號 - Python爬蟲與數據挖掘(crawler_python)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。