1. 程式人生 > 實用技巧 >Python爬蟲-帶你自制新聞網站,先學先會一起來學吧

Python爬蟲-帶你自制新聞網站,先學先會一起來學吧

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理

以下文章來源於搜狗網 作者:AI科技大本營

( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )

我們總是在爬啊爬,爬到了資料難道只是為了做一個詞雲嗎?

當然不!這次我就利用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,別學我)