python爬虫_django+vue+echarts可视化查询所有CSDN用户质量分

文章目录

    • ⭐前言
      • ⭐ 效果
      • ⭐django简介
      • ⭐vue3简介
      • ⭐vue引入echarts
    • ⭐前后分离实现
    • 💖 django代码层
    • 💖 vue3代码层
    • 结束

⭐前言

大家好,我是yma16,本文分享关于前后分离django+vue+echarts可视化查询CSDN用户质量分。
该系列文章:
python爬虫_基本数据类型
python爬虫_函数的使用
python爬虫_requests的使用
python爬虫_selenuim可视化质量分

⭐ 效果

项目部署在inscode上:https://yma16.inscode.cc/
表格展示文章评分
score-table
echarts图表点击可跳转博文:
echarts-article

gif演示:
git-show

⭐django简介

Django是一个开源Python web框架,由Django Software Foundation负责维护。它采用了“MTV”(模型、模板、视图)的设计架构,以使代码的复用、维护和可扩展性更加容易。Django包括许多内置的功能,如ORM(对象关系映射),表单处理,会话管理和身份验证等。它还支持许多插件和扩展,如REST框架和CMS(内容管理系统)。Django被广泛应用于构建高度可伸缩的Web应用程序,包括社交网络、博客、电子商务应用程序等。

⭐vue3简介

Vue3是最新版本的Vue.js框架,是Vue.js的第三个主要版本。Vue3兼容Vue2,并且进行了几个重要的改进。最大的改进是对组合API的引入,组合API可以让开发者更轻松地抽象出可复用的逻辑,提高代码的组合性和可重用性。Vue3还引入了更快速的虚拟DOM和编译器,带来更快的渲染速度和更小的应用程序大小。另外,Vue3还提供了更好的TypeScript支持,使得开发者更容易编写类型安全的代码。总之,Vue3是一个更加强大和灵活的框架,具有更好的性能和更好的开发体验。

⭐vue引入echarts

要在Vue中使用Echarts,需要先安装Echarts:

npm install echarts --save

然后,在Vue3中引入Echarts:

import * as echarts from 'echarts'export default {name: 'MyChart',data() {return {chartInstance: null,}},mounted() {this.initChart()},methods: {function initChart() {// 获取容器元素const container = this.$refs.chartContainer// 初始化Echarts实例this.chartInstance = echarts.init(container)// 设置图表配置项const option = {...}// 渲染图表this.chartInstance.setOption(option)}},
}

在模板中,需要添加一个容器元素来容纳图表:

<template><div ref="chartContainer" style="width: 100%; height: 400px;"></div>
</template>

这样就可以在Vue3中使用Echarts了。如果需要使用Vue3的Composition API来管理图表逻辑,可以将上面的代码封装成一个自定义Hook来重用。

⭐前后分离实现

思路:
后端:django抓取用户的接口数据暴露
前端: vue3+antd调用接口数据实现可视化用户质量分

💖 django代码层

view视图代码:

from django.http import JsonResponse
import openai,requests,json
import js2py
import json
# CSDN个人博文质量查询
import requests
from requests_toolbelt import MultipartEncoder# 获取文章列表
def get_post_list_urls(page, username):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0"}lb_params = {"page": page,"size": "20","businessType": "blog","orderby": "","noMore": "false","year": "","month": "","username": username,}urls = "https://blog.csdn.net/community/home-api/v1/get-business-list"try:res = requests.get(url=urls, headers=headers, params=lb_params)data_list = res.json()["data"]["list"]return data_listexcept Exception as e:print('page error', str(e))return 0# 查询质量分数
def get_sorce(article_url):url = "https://bizapi.csdn.net/trends/api/v1/get-article-score"headers = {"accept": "application/json, text/plain, */*","accept-encoding": "gzip, deflate, br","accept-language": "zh-CN,zh;q=0.9","content-length": "218","content-type": "multipart/form-data; boundary=----WebKitFormBoundarymKS9dpHZYkkMHZWj","cookie": "uuid_tt_dd=10_37086218120-1683187755910-896626; __bid_n=187e5d0cbaf89d1f724207; __gads=ID=3fcd1ab266c84bd9-220bdd6894e0004c:T=1683187762:RT=1683187762:S=ALNI_MbszTpjyvTAnMd5pG5eE3Ol6jpbVw; __gpi=UID=00000c0178601530:T=1683187762:RT=1683857695:S=ALNI_Mb7KrJygTsLQRFePHRA1tpMIbjBqA; UserName=u014727709; UserInfo=836a27b06b334117be2e4e851dd7733c; UserToken=836a27b06b334117be2e4e851dd7733c; UserNick=%E6%83%B3%E4%BD%A0%E4%BE%9D%E7%84%B6%E5%BF%83%E7%97%9B; AU=794; UN=u014727709; BT=1683860533258; p_uid=U010000; Hm_up_6bcd52f51e9b3dce32bec4a3997715ac=%7B%22islogin%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isonline%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isvip%22%3A%7B%22value%22%3A%220%22%2C%22scope%22%3A1%7D%2C%22uid_%22%3A%7B%22value%22%3A%22u014727709%22%2C%22scope%22%3A1%7D%7D; FPTOKEN=KFhOagH01mR+lE0zk/9/4AZwdybQP4pJ9q4URSqGTcW3XgmQAKRP4XtCWpwF+xPBRetpgJyJFG2D0s49i9WhPT9JgHOJHov85Eg6St4WHj3G1zbPbra/SUcnnYPxRE0NO8mKry4LEVT/QetTZ24R3KXbnEX3agAt6UFFWLVFgBb62Ay1YlJtNXrFkIVbk5AeVNR9Bx6M8d8k9s2FmAAE44V1cRUjFunOpnmtwhHvH+CUoBgMptgWVDxl110YHcOm3auS61uCROqlmB/TWa1/wBOjoOVw9weCASapZAIB0D+Jth2cPKzPsDEQMBRVsFqlaCb1dRjByej6jwzW8JKkotUxHVnhG2ad2Sl2zMGgbP3LtwOocyYbd7aaccpYiIj/ICbWPhQpBi6bfOau6eenzQ==|Ux1hTZK4ogvPMjCnvaBGyetqQq0EbCbGSZMQzvU1HfI=|10|338abfb0d23c89b679ee1ded400a352b; ssxmod_itna=Yq+h7I4AxjxG2xlbr+eKD5KdxgGC0j7/jDBwDAIYDZDiqAPGhDC34FxT80OYcxqGkQZMGpNlixnx3mQVC7Yu1rDCPGnDBF+orDee=D5xGoDPxDeDABPiTDYSQDEDeKDRDWKGyR3NcOP5B0OU1PDR15DwxD15BIxvxG1DQ5Dsp4p44DCazEqDm+ohpHzDCKDj1yODmWFY4GdrQG4IYkeMYRD=E053mb37CG4TCi3qenDkYr4QDBD4abPbe=DirGqaQGP4D===; ssxmod_itna2=Yq+h7I4AxjxG2xlbr+eKD5KdxgGC0j7/D8LCBkDGNGk81DFEiIAZ0OPApwX74QV7jqi=qI1BHL+oNii72w58ECv4+2ten9UQ27AD3XG3bRpyrPhXjkDwjXNHYMuuDv6zAt45ojzEtWguOWZHHVYIOaEqFRC0x5FqGoawzo6HaR07F3j+=2jyGqrW7SA0FdP4AfWpxx6H46tGIYiPkKicz3n5G/Z8OVn0tjfcQeWWiu39DoPHXZZqKMCg8e6+IIEyDXRG6YCjtb6lQ2Y=IZxOB2GPkfutGLcvz2Z/0uWwgoHvcSby+/pPg6qDSmVrp+Ov0GwVZKGcUBBjxKqkEvv7IzrtUleOn+4BE7WqYgqQ2KpEw6QmKD34QApn+b=Dz64KlmZWXFlfdDpNiLSODjetWgE7PUFSETx33n3PG=WSExWf5c3+DWwe6E6hsCeQnwxSGGedenIzlPumU7bpt/NQYqPYfxt5yCaTZKk2N4Yqo6+Iapx0UdSEy7TAYyicHsAHF/PADusie0EuZBn0EEyzbix7Q1tFjEduvE=ba9tQWTLt8xunPpSZWvvxfYR8ir2Lxf7IEa/93HpKmmwimHj+OcY5H4DQ9U82i0kFGD1YuDbUvj7u1bi005D08DiQ5YD=; log_Id_view=5351; c_dl_fref=https://blog.csdn.net/qq_45157635/article/details/131064971; c_dl_prid=1687150160923_424595; c_dl_rid=1687150175427_591440; c_dl_fpage=/download/qq_47632786/85622911; c_dl_um=distribute.pc_relevant.none-task-download-2%7Edefault%7ECTRLIST%7EAntiPaid-3-87472365-blog-131064971.235%5Ev38%5Epc_relevant_default_base3; c_utm_source=1966961068; c_first_ref=default; c_segment=2; dc_sid=1b9e8213caa5348d865241cd9435a5e9; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1687824698,1687911255,1687956527,1687997637; firstDie=1; dc_session_id=10_1688013171909.840541; c_page_id=default; log_Id_click=1268; c_pref=default; c_ref=default; c_first_page=https%3A//www.csdn.net/qc%3Futm_source%3D1966961068; c_dsid=11_1688015643395.788238; utm_source=1966961068; log_Id_pv=1605; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1688015644; dc_tos=rx017i","origin": "https://www.csdn.net","referer": "https://www.csdn.net/qc?utm_source=1966961068","sec-fetch-mode": "cors","sec-fetch-site": "same-site","user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36","x-ca-key": "203930474","x-ca-nonce": "c604c7f2-88ec-4cbf-aa7c-3aec9803c515","x-ca-signature": "AzzRQ6mYf0LscPig+ksIdjHUNjlA7T3WGEdx08cS96U=","x-ca-signature-headers": "x-ca-key,x-ca-nonce","x-ca-signed-content-type": "multipart/form-data"}params = MultipartEncoder({"url": article_url})headers["Content-Type"] = params.content_typetry:res = requests.post(url=url, headers=headers, data=params, timeout=10,)sorce = res.json()["data"]return sorceexcept Exception as e:print('grade error',str(e))return 0def serachCsdnUserArticleInfo(username):try:res = []page = 1while True:data_list = get_post_list_urls(page, username)page += 1if data_list == 0 or len(data_list) == 0:breakelse:res += data_listdata_array = []for data in res:article_url = data["url"]grade_dict = get_sorce(article_url)article_title=data['title']article_vieCount=data['viewCount']article_commentCount=data['commentCount']article_collectCount=data['collectCount']article_postTime=data['postTime']grade_message=grade_dict['message']grade_score=grade_dict['score']data_array.append({'title':article_title,'url':article_url,'viewCount':article_vieCount,'commentCount':article_commentCount,'collectCount':article_collectCount,'message':grade_message,'score':grade_score,'postTime':article_postTime})return data_arrayexcept Exception as e:print('username error', str(e))

urls路由的代码:

from django.contrib import admin
from .views import getCsdnGrade
from django.urls import path,includeurlpatterns = [path(r'getCsdnGrade/', getCsdnGrade),
]

💖 vue3代码层

前端代码层:

<script setup>
import axios from 'axios';
import * as echarts from 'echarts';import { onMounted, reactive, onUnmounted } from 'vue';
const state = reactive({loading: false,searchValue: 'qq_38870145',firstChart: null,columns: [{title: '文章名称',dataIndex: 'title',fixed:true}, {title: '链接',dataIndex: 'url',sorter: true,}, {title: '浏览量',dataIndex: 'viewCount',sorter: true,}, {title: '收藏量',dataIndex: 'collectCount',sorter: true,}, {title: '分数',dataIndex: 'score',sorter: true,}, {title: '建议',dataIndex: 'message',}, {title: '发文时间',dataIndex: 'postTime',}],dataSource: []
})
const getCsdnData = (uId) => {const url = 'https://yongma16.xyz/common-api/getCsdnGrade/'const data = {uId}state.loading = trueaxios.post(url, data, { timeout: 100000 }).then(res => {state.dataSource = res.data.datastate.loading = falseinitFirstData()}).catch((r) => {console.log(r)state.loading = falsestate.dataSource = []initFirstData()})
}
onMounted(() => {onSearch()
})
const onSearch = () => {if (!state.searchValue) {return window.alert('请输入用户id')}getCsdnData(state.searchValue)
}function initFirstData() {// 基于准备好的dom,初始化echarts实例const myChart = echarts.init(document.getElementById('first'));const option = {title: {text: 'csdn 质量分柱状图 点击跳转到对应的文章'},toolbox: {show: true,feature: {saveAsImage: {}}},dataZoom: [{id: 'dataZoomX',type: 'slider',xAxisIndex: [0],filterMode: 'filter'},{id: 'dataZoomY',type: 'slider',yAxisIndex: [0],filterMode: 'empty'}],tooltip: {trigger: 'axis',axisPointer: {type: 'shadow'}},legend: {},xAxis: {type: 'category',data: state.dataSource.map(item => item.postTime)},yAxis: {type: 'value'},tooltip: {formatter: function (params) {console.log('params', params)const findItem = state.dataSource.find(item => {return item.postTime == params.name})return `<span style='color:blue'>-<span> 博客标题:${params.name}  <br><span style='color:green'>-<span> 博客质量:${params.value} <br><span style='color:red'>-<span> 博客建议:${findItem.message}<br><span style='color:blue'>-<span> 博客地址:${findItem.url}<br>`},},series: [{data: state.dataSource.map(item => item.score),type: 'bar',showBackground: true,backgroundStyle: {color: 'rgba(180, 180, 180, 0.2)'},label: { //柱体上显示数值show: true,//开启显示position: 'center',//在上方显示textStyle: {//数值样式fontSize: '2px',color: 'white'}},markPoint: {data: [{ type: 'max', name: '最高分' },{ type: 'min', name: '最低分' }]},markLine: {data: [{ type: 'average', name: '平均分' }]}}]};// 使用刚指定的配置项和数据显示图表。myChart.setOption(option);// 监听state.firstChart = myChart;window.onresize = myChart.resizemyChart.on('click', function (params) {const findItem = state.dataSource.find(item => {return item.postTime == params.name})if (params.name) {window.open(findItem.src, '_blank')}});onUnmounted(() => {window.onresize = null})
}
</script><template><div class="container"><div><a-input-search v-model:value="state.searchValue" :disabled="state.loading" placeholder="输入用户id" enter-button@search="onSearch" /></div><br><div><a-table :scroll="{ x: 800 }" :columns="state.columns" :data-source="state.dataSource" :loading="state.loading"></a-table></div><div><div id="first" style="width:800px;max-height:900px;"></div></div></div>
</template><style scoped></style>

inscode代码如下:

搜索用户id查询:
search-uid

结束

本文分享python的自动化获取质量分到此结束!
scene

👍 点赞,是我创作的动力!
⭐️ 收藏,是我努力的方向!
✏️ 评论,是我进步的财富!
💖 感谢你的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring IoC及DI依赖注入

Spring 1.Spring的含义&#xff1a; Spring 可从狭义与广义两个角度看待 狭义的 Spring 是指 Spring 框架(Spring Fremework) 广义的 Spring 是指 Spring 生态体系 2.狭义的 Spring 框架 Spring 框架是企业开发复杂性的一站式解决方案 Spring 框架的核心是 IoC 容器和 AO…

LayUi之选项卡的详解(附源码讲解)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于LayUi的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.选项卡是什么 二.选项卡在什么时候使用…

java版鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统源代码

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…

【云原生】· 一文了解docker中的网络

目录 &#x1f352;查看docker网络 &#x1f352;bridge网络 &#x1f352;none网络 &#x1f352;host网络 &#x1f352;自定义容器网络 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;云原生专栏 根据前面的学习&#xff0c;已经对d…

Qt/C++原创项目作品精选(祖传原创/性能凶残)

00 前言说明 从事Qt开发十年有余&#xff0c;一开始是做C#.NET开发的&#xff0c;因为项目需要&#xff0c;转行做嵌入式linux开发&#xff0c;在嵌入式linux上做可视化界面开发一般首选Qt&#xff0c;当然现在可选的方案很多比如安卓&#xff0c;但是十多年前那时候板子性能低…

服务器反向代理

反向代理作用 隐藏服务器信息 -> 保证内网的安全&#xff0c;通常将反向代理作为公网访问地址&#xff0c;web服务器是内网&#xff0c;即通过nginx配置外网访问web服务器内网 举例 百度的网址是&#xff1a;http://www.baidu.com &#xff0c; 现在我通过自己的服务器地…

unity 调用C++ dll 有类和指针操作

这个在之前unity 调用C dll 操作升级套娃函数调用_天人合一peng的博客-CSDN博客的基础上&#xff0c;但实事时类相互嵌套&#xff0c;非常不好处理。 1 测试直接将main()生成dll程序能运行不。 发现是可以的。 2 那就是想方法把对象或指针的操作的下一级函数直接写到main里面&…

STM32基础知识点总结

一、基础知识点 1、课程体系介绍 单片机概述arm体系结构STM32开发环境搭建 STM32-GPIO编程-点亮世界的那盏灯 STM32-USART串口应用SPI液晶屏 STM32-中断系统 STM32-时钟系统 STM32-ADC DMA 温湿度传感器-DHT11 2.如何学习单片机课程 多听理论、多理解、有问题及时提问 自己多…

ChatGPT助力校招----面试问题分享(十一)

1 ChatGPT每日一题&#xff1a;PCB布线&#xff0c;高速信号线走直角的后果 问题&#xff1a;PCB布线&#xff0c;高速信号线走直角的后果 ChatGPT&#xff1a;对于高速信号线来说&#xff0c;最好避免使用直角布线。直角布线会引入反射和信号损耗&#xff0c;从而导致信号完…

【Python】selenium项目实战:从12306网站获取特定时间段二等座有票的车次

文章目录 一、项目背景二、页面查找1、查询条件2、定位有二等座的元素3、定位有二等座的车次信息4、CtrlF检验xpath查找的车次 三、代码实现 一、项目背景 工具&#xff1a; pythonpycharmselenium 12306网址&#xff1a; https://kyfw.12306.cn/otn/leftTicket/init?linktyp…

【云原生】Docker跨主机网络Overlay与Macvlan的区别

跨主机网络通信解决方案 docker原生的overlay和macvlan 第三方的flannel&#xff0c;weave&#xff0c;calico 1.overlay网络 在Docker中&#xff0c;Overlay网络是一种容器网络驱动程序&#xff0c;它允许在多个Docker主机上创建一个虚拟网络&#xff0c;使得容器可以通过这…

氢辉能源|[4GW]质子交换膜产线投产发布会暨[3MW]PEM电解槽正式交付

2023年7月12日下午&#xff0c;氢辉能源&#xff08;深圳&#xff09;有限公司&#xff08;以下简称氢辉能源&#xff09;质子交换膜产线投产发布会暨12台50标方3MW电解槽交付仪式在深圳市龙岗区国际低碳城成功举办。 此外&#xff0c;氢辉能源与远景能源、润世华集团、宏洲新能…

【MySQL】MySQL里程碑

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️MySQL】 文章目录 时间表从产品特性的角度梳理其发展过程中了解MySQL里程碑事件 时间表 从产品特性的角度梳理其发展过程中了解MySQL里程碑事件 1995年&#xff0c;MySQL 1.0发布&#xff0c;仅供内…

MongoDB负载均衡集群监控

对负载均衡的集群监控&#xff0c;不仅仅集中在对集群所有的资源、服务等进行监控&#xff0c;还要兼顾整体逻辑。以MongoDB高可用负载均衡集群为例&#xff0c;对逻辑层面的监控&#xff0c;就是模拟用户行为&#xff0c;访问集群数据&#xff0c;判断运行状态是否正常。 Mong…

opencv 图像基础处理_灰度图像

opencv 学习2_灰度图像 二值图像表示起来简单方便&#xff0c;但是因为其仅有黑白两种颜色&#xff0c;所表示的图像不够细腻。如果想要表现更多的细节&#xff0c;就需要使用更多的颜色。例如&#xff0c;图 2-3 中的 lena 图像是一幅灰度图像&#xff0c; 它采用了更多的数值…

简单线性回归评估指标+R Squared

使得每一个数据集尽可能的小 均方误差MSE&#xff1a;&#xff08;平方和取平均值&#xff09; 均方根误差RMSE&#xff1a;&#xff08;平方和取平均值开根号&#xff09;&#xff1a;平均误差值 平均绝对误差MAE&#xff1a;&#xff08;绝对值取平均&#xff09;&#xff1a…

Vue3通透教程【十八】TS为组件的props标注类型

文章目录 &#x1f31f; 写在前面&#x1f31f; 回顾defineProps的基础写法&#x1f31f; defineProps的TS写法&#x1f31f; withDefaults方法&#x1f31f; 拓展&#x1f31f; 写在最后 &#x1f31f; 写在前面 专栏介绍&#xff1a; 凉哥作为 Vue 的忠实 粉丝输出过大量的 …

内网安全:内网穿透详解

目录 内网穿透技术 内网穿透原理 实验环境 内网穿透项目 内网穿透&#xff1a;Ngrok 配置服务端 客户端配置 客户端生成后门&#xff0c;等待目标上线 内网穿透&#xff1a;Frp 客户端服务端建立连接 MSF生成后门&#xff0c;等待上线 内网穿透&#xff1a;Nps 服…

【Linux】- Linux 磁盘分区、挂载

Linux 磁盘分区、挂载 1.1 Linux 分区1.2 硬盘说明1.3 磁盘情况查询 1.1 Linux 分区 原理介绍 Linux 来说无论有几个分区&#xff0c;分给哪一目录使用&#xff0c;它归根结底就只有一个根目录&#xff0c;一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系…

Mac搭建安卓模拟器(支持M1/M2)

引言 最近在研究Vue打包成app&#xff0c;给我的报价器搞一个移动端&#xff0c;奈何没有安卓手机用于测试。所以想到安装一个安卓模拟器。 看了下目前主流的安卓模拟器基本都不支持Mac版本。网易的mumu目前来看还是只支持Intel芯。 1. 简单版&#xff08;仅M系&#xff09;…