爬虫+ matplotlib pyplot数据动态交互显示
云计算课上的小实训,用一个上午来写 崩的文章目录
前言
老师想让我们做一个基于爬虫的数据可视化,要实时,要交互!!
提示:以下是本篇文章正文内容,下面案例可供参考
一、爬取豆瓣的网站获取想要的contents
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}
def fetch_data(url):
req = request.Request(url,headers=headers) # 请求url(GET请求)
with request.urlopen(req) as f: # 打开url请求(如同打开本地文件一样)
return json.loads(f.read().decode('utf-8')) # 读数据 并编码同时利用json.loads将json格式数据转换为python对象
url1='https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0'
take=fetch_data(url1) #里面字典类型的contents
这块代码写的使爬豆瓣的代码,因为网站内容保存在json中,要利用json.loads 进行解码。
二、使用步骤
1.引入库
代码如下(示例):
from urllib import request
import json
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 为了在pylab中显示中文
数据连接pymatlab
2.从json文件中的拿到的 title和rate 将他写入 pltlab的画布中 横坐标为电影名字,纵坐标为电影评分。
代码如下(示例):
t=[]
m=[]
def get_function():
take=fetch_data(url1)
list_movie = take['subjects']
for i in list_movie:
x_data = i['title']
y_data = i['rate']
print(x_data, y_data)
time.sleep(1)
plt.clf() # 清空画布内容
t.append(x_data)
m.append(y_data)
#> 这块代码我想设置纵坐标的范围
# plt.ylim(0, 10) # 设置坐y标轴范围
# my_y_ticks = np.arange(0, 10, 0.1)
# plt.yticks(my_y_ticks)
#> 但是达不到预期的效果,希望有大神帮我找找问题的所在
plt.plot(t, m, 'y')
plt.pause(1) # 暂停一秒
get_function()
整串代码在pycharm上运行起来没有啥问题
post一个完整的代码
拿去跑不客气
from urllib import request
import json
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 为了显示中文
plt.ion() # 交互模式
plt.figure(1)
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}
url1='https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0'
def fetch_data(url):
req = request.Request(url,headers=headers) # 请求url(GET请求)
with request.urlopen(req) as f: # 打开url请求(如同打开本地文件一样)
return json.loads(f.read().decode('utf-8')) # 读数据 并编码同时利用json.loads将json格式数据转换为python对象
t=[]
m=[]
def get_function():
take=fetch_data(url1)
list_movie = take['subjects']
for i in list_movie:
x_data = i['title']
y_data = i['rate']
print(x_data, y_data)
time.sleep(1)
plt.clf() # 清空画布内容
t.append(x_data)
m.append(y_data)
# plt.ylim(0, 10) # 设置坐y标轴范围
# my_y_ticks = np.arange(0, 10, 0.1)
# plt.yticks(my_y_ticks)
plt.plot(t, m, 'y')
plt.pause(1) # 暂停一秒
get_function()
4.效果展示
总结
动态交互是实现了,但还是没有达到想要的效果,没办法定义这个纵坐标的范围,还是存在着一定的问题。 喜欢小胡的可以 thumps up!