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

news/2024/7/5 6:12:04

来源 | 凹凸数据(ID:alltodata)

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

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

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

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

(给个面子,别笑

演示三个功能

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

  • 爬取数据

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

  • 利用热点推荐新闻

爬虫部分

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

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

图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.textdata = 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 CORSCORS(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,别学我)

更多精彩推荐
  • B 站神曲 damedane:精髓在于换脸,五分钟就能学会

  • 怎样用 Python 控制图片人物动起来?一文就能 Get!

  • 脑机接口技术:融资噱头还是文明推手?

  • Linus Torvalds 回应,Debian 项目曾讨论永久禁止他出席会议!

  • 字节跳动斩获支付牌照欲建金融帝国,技术实力配得上野心吗?


http://lihuaxi.xjx100.cn/news/267083.html

相关文章

linux守护进程的创建

下面的完成了这样一个功能&#xff0c;创建一个守护进程&#xff0c;每个一秒在/tmp目录下的文件peng.txt中记录当前系统时间。 一、守护进程 守护进程是linux中的后台服务进程&#xff0c;在系统启动时开始运行&#xff0c;在系统关闭时终止。Linux系统中的大多数服务进程都是…

决策树算法简介

决策树算法简介 决策树思想的来源非常朴素&#xff0c;程序设计中的条件分支结构就是if-else结构&#xff0c;最早的决策树就是利用这类结构分割数据的一种分类学习方法 决策树&#xff1a;是一种树形结构&#xff0c;其中每个内部节点表示一个属性上的判断&#xff0c;每个分…

pymongo分片

#!/usr/bin/python # -*- coding: UTF-8 -*- import time from pymongo import MongoReplicaSetClient from pymongo import MongoClient # 连接单机 # single mongo # c MongoClient(host"192.168.89.151", port27017) # okay # 连接集群 # mongo cluster c Mongo…

一文读懂EfficientNet

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达导读 本文介绍了一种高效的网络模型EfficientNet&#xff0c;并分析了 EfficientNet B0 至B7的网络结构之间的差异。我在一个Kaggle竞赛中翻阅notebooks&#xff0c;发现几…

利用python爬取IP地址归属地等信息!

被使用的例子: IP:202.204.80.112 更多关于IP138的信息&#xff1a;https://blog.csdn.net/weixin_42859280/article/details/83752510 源代码&#xff1a; import requests url "http://m.ip138.com/ip.asp?ip" try:r requests.get(url 202.204.80.112)r.raise…

在字节跳动工作是什么样的体验?

链接&#xff1a;https://www.zhihu.com/question/28881353/answer/1912209855编辑&#xff1a;深度学习与计算机视觉声明&#xff1a;仅做学术分享&#xff0c;侵删作者&#xff1a;爱喝可乐的喵https://www.zhihu.com/question/28881353/answer/128694674工作久了之后&#x…

Linux下通过txt文件导入数据到MySQL数据库

1、修改配置文件 在 /etc/my.conf 中添加 local_infile1 2、重启MySQL >service mysqld restart 3、登录数据库 登录时添加参数 --local-infile >mysql --local-infile -uroot -p 4、进入相应的数据库导入数据转载于:https://www.cnblogs.com/SiriYang/p/10641954.html

List集合的去除重复性练习

package com.java.b.listdmeo.www; import java.util.ArrayList;import java.util.Iterator; import com.java.Student.www.Student; public class listtest { public static void main(String[] args) { //创建一个集合&#xff0c;该集合为List 集合 ArrayList listnew Arr…