Python爬蟲並自製新聞網站,太好玩了

2020-09-14     AI科技大本營

原標題:Python爬蟲並自製新聞網站,太好玩了

來源 | 凹凸數據(ID:alltodata)

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

當然不!這次我就利用flask為大家呈現一道小菜。

Flask是python中一個輕量級web框架,相對於其他web框架來說簡單,適合小白練手。使用Flask+爬蟲,教大家如何實時展示自己爬下來的數據到網頁上。

先給大家展示一下這個醜醜的網頁

(給個面子,別笑

演示三個功能

整個流程就是簡單的三步:

  • 爬取數據

  • 利用實時爬取數據生成詞雲

  • 利用熱點推薦新聞

爬虫部分

這次爬蟲主要利用多線程方式爬取新浪新聞+網易新聞所有欄目新聞信息。

一共14個欄目,兩個網站的頁面信息都是通過ajax加載完成的,請求對應的欄目連結後,返回的字符串是這樣的,仔細觀察會發現我們要看的新聞內容被包含在 data_callback 裡面

圖2

是一個列表樣式,

這時候我們就可以用 eval 函數將這個字符串處理成一個列表格式

defget_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個欄目的新聞

defmulti_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部分:

輔材處理完成,現在我們開始做主菜部分。

fromflask importFlask,render_template,request

#註冊創建app應用,_name_是python預定義變量

app = Flask(__name__)

#跨域請求cors

fromflask_cors importCORS

CORS(app, resources= r'/*')

#啟動爬蟲頁

@app.route('/test', methods=['GET'])

defmytest:

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文件(舉例新聞推薦頁面)

< htmllang= "en">

< head>

< metacharset= "UTF-8">

< title> Title title>

head>

< body>

< divalign= ""class= "img">

< h1> 今日新聞推薦 h1>

< divclass= "img">

< ul>

< li> < ahref= "{{data[0][1]}}"> {{data[0][0]}} a> li>

< li> < ahref= "{{data[1][1]}}"> {{data[1][0]}} a> li>

< li> < ahref= "{{data[2][1]}}"> {{data[2][0]}} a> li>

< li> < ahref= "{{data[3][1]}}"> {{data[3][0]}} a> li>

< li> < ahref= "{{data[4][1]}}"> {{data[4][0]}} a> li>

< li> < ahref= "{{data[5][1]}}"> {{data[5][0]}} a> li>

< li> < ahref= "{{data[6][1]}}"> {{data[6][0]}} a> li>

< li> < ahref= "{{data[7][1]}}"> {{data[7][0]}} a> li>

< li> < ahref= "{{data[8][1]}}"> {{data[8][0]}} a> li>

< li> < ahref= "{{data[9][1]}}"> {{data[9][0]}} a> li>

< li> < ahref= "{{data[10][1]}}"> {{data[10][0]}} a> li>

< li> < ahref= "{{data[11][1]}}"> {{data[11][0]}} a> li>

< li> < ahref= "{{data[12][1]}}"> {{data[12][0]}} a> li>

< li> < ahref= "{{data[13][1]}}"> {{data[13][0]}} a> li>

< li> < ahref= "{{data[14][1]}}"> {{data[14][0]}} a> li>

< li> < ahref= "{{data[15][1]}}"> {{data[15][0]}} a> li>

< li> < ahref= "{{data[16][1]}}"> {{data[16][0]}} a> li>

< li> < ahref= "{{data[17][1]}}"> {{data[17][0]}} a> li>

< li> < ahref= "{{data[18][1]}}"> {{data[18][0]}} a> li>

< li> < ahref= "{{data[19][1]}}"> {{data[19][0]}} a> li>

ul>

div>

< divclass= "logo-img">

div>

div>

我們將從資料庫中獲取到的數據傳入到h5文件

#新聞推薦

@app.route('/news')

defnews_list:

data = get_mysql

returnrender_template( 'index4.html', data=data)

複製粘貼20個 li 方便大家理解我設置今日推薦新聞條數是20條,

你也可以通過自己喜愛算法從資料庫選擇20條新聞推送的網頁

刷新新聞與查看新聞

到這,一個簡陋的 Flask 網站就完成了,是不是很簡單。

Flask 是個小巧、靈活的web框架,可以讓自己決定定製哪些功能,靈活定製組件,非常適用於小型網站。

結語:(網站想要漂亮,還是要學一下h5,別學我)

文章來源: https://twgreatdaily.com/zh-tw/EEgLqnQBLq-Ct6CZSd5o.html










CSDN湘苗培優

2020-12-24