小伙Python爬虫并自制新闻网站,太好玩了

Irene181
• 阅读 1947

大家好,我又来了,我是银牌厨师豆腐!

我们总是在爬啊爬,爬到了数据难道只是为了做一个词云吗?

小伙Python爬虫并自制新闻网站,太好玩了

当然不!这次我就利用flask为大家呈现一道小菜。

Flask是python中一个轻量级web框架,相对于其他web框架来说简单,适合小白练手。使用Flask+爬虫,教大家如何实时展示自己爬下来的数据到网页上。

先给大家展示一下这个丑丑的网页 ↓

(给个面子,别笑小伙Python爬虫并自制新闻网站,太好玩了

小伙Python爬虫并自制新闻网站,太好玩了

演示三个功能

整个流程就是简单的三步:

  • 爬取数据

  • 利用实时爬取数据生成词云

  • 利用热点推荐新闻

爬虫部分:

这次爬虫主要利用多线程方式爬取新浪新闻+网易新闻所有栏目新闻信息。

一共14个栏目,两个网站的页面信息都是通过ajax加载完成的,请求对应的栏目链接后,返回的字符串是这样的,仔细观察会发现我们要看的新闻内容被包含在data_callback里面

小伙Python爬虫并自制新闻网站,太好玩了

图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()  

对了,爬虫之后我们还是做了词云的,哈哈哈

点击生成今日热点新闻词云,静待片刻

小伙Python爬虫并自制新闻网站,太好玩了

今日热点词汇

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条新闻推送的网页

小伙Python爬虫并自制新闻网站,太好玩了

刷新新闻与查看新闻

到这,一个简陋的 Flask 网站就完成了,是不是很简单。

Flask 是个小巧、灵活的web框架,可以让自己决定定制哪些功能,灵活定制组件,非常适用于小型网站。

结语:(网站想要漂亮,还是要学一下h5,别学我)

小伙Python爬虫并自制新闻网站,太好玩了

**-----**------**-----**---**** End **-----**--------**-----**-****

往期精彩文章推荐:

小伙Python爬虫并自制新闻网站,太好玩了

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/-cFbUapDw1UPTVf0sA6_3A,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Aimerl0 Aimerl0
3年前
Python网络爬虫与信息提取
title:Python网络爬虫与信息提取date:2020121001:00:23tags:Pythoncategories:学习笔记写在前面不知道写啥其实说实话TOC网络爬虫之规则安装requests库cmd命令行打开输入pip3installrequests,等待即可简单测试,爬一下bkjwpythonimportrequ
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Python进阶者 Python进阶者
4个月前
爬取同样内容,xpath方法会比bs4要慢很多吗?
大家好,我是Python进阶者。一、前言前几天在Python白银交流群【沐子山树】问了一个Python网络爬虫的问题,问题如下:爬取同样内容,xpath方法会比bs4要慢很多吗?二、实现过程这里【Kimi】给了个思路如下:爬取网页内容时,使用XPath和B