基于豆瓣爬虫的pylab数据动态交互显示

爬虫+ 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!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值