【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件)

这篇具有很好参考价值的文章主要介绍了【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

web 效果预览:
【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划

一、API 分析

1.1 质量分查询

先去质量查询地址:https://www.csdn.net/qc

输入任意一篇文章地址进行查询,同时检查页面,在Network选项下即可看到调用的API的请求地址、请求方法、请求头、请求体等内容:
【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划

请求头里面很多参数是不需要的,我们用ApiPost这个软件来测试哪些是必要参数。

经过测试,请求头只需要下面这几个参数即可。
【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划

请求体是:

url:文章地址

测试结果:
【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划


文章质量分查询的问题已经解决了。下面来批量获取文章的URL。

1.2 文章url获取

点击个人主页,开启检查,然后点击主页的文章选项。

在这个选项下即可看到返回的文章列表:
【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划

方法是:GET

请求URL:

https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=20&businessType=blog&orderby=&noMore=false&year=&month=&username=id

参数说明:

  • page:请求的页面,1就代表第一页(每一页只能显示100条)
  • size:每页数量
  • username:你的csdn id

测试结果:可以返回每篇文章的地址、阅读量、评论量等数据。
【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划

二、代码实现

2.1 Python

2.11 分步实现

为了便于理解,把程序分为2个部分:

  1. 批量获取文章信息,保存为excel文件;
  2. 从excel中读取文章url,查询质量分,再将质量分添加到excel。

批量获取文章信息:

效果(获取20篇):

【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划

代码:

# 批量获取文章信息并保存到excel
class CSDNArticleExporter:
    def __init__(self, username, size, filename):
        self.username = username
        self.size = size
        self.filename = filename

    def get_articles(self):
        url = f"https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size={self.size}&businessType=blog&orderby=&noMore=false&year=&month=&username={self.username}"
        with urllib.request.urlopen(url) as response:
            data = json.loads(response.read().decode())
        return data['data']['list']

    def export_to_excel(self):
        df = pd.DataFrame(self.get_articles())
        df = df[['title', 'url', 'postTime', 'viewCount', 'collectCount', 'diggCount', 'commentCount']]
        df.columns = ['文章标题', 'URL', '发布时间', '阅读量', '收藏量', '点赞量', '评论量']
        # df.to_excel(self.filename)
        # 下面的代码会让excel每列都是合适的列宽,如达到最佳阅读效果
        # 你只用上面的保存也是可以的
        # Create a new workbook and select the active sheet
        wb = Workbook()
        sheet = wb.active
        # Write DataFrame to sheet
        for r in dataframe_to_rows(df, index=False, header=True):
            sheet.append(r)
        # Iterate over the columns and set column width to the max length in each column
        for column in sheet.columns:
            max_length = 0
            column = [cell for cell in column]
            for cell in column:
                try:
                    if len(str(cell.value)) > max_length:
                        max_length = len(cell.value)
                except:
                    pass
            adjusted_width = (max_length + 5)
            sheet.column_dimensions[column[0].column_letter].width = adjusted_width
        # Save the workbook
        wb.save(self.filename)


批量查询质量分:

效果:
【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划

代码:请求头的参数自己安装前面的方法获取

# 批量查询质量分
class ArticleScores:
    def __init__(self, filepath):
        self.filepath = filepath

    @staticmethod
    def get_article_score(article_url):
        url = "https://bizapi.csdn.net/trends/api/v1/get-article-score"
        headers = {
            "Accept": "...",
            "X-Ca-Key": "...",
            "X-Ca-Nonce": "...",
            "X-Ca-Signature": "...",
            "X-Ca-Signature-Headers": "x-ca-key,x-ca-nonce",
            "X-Ca-Signed-Content-Type": "multipart/form-data",
        }
        data = urllib.parse.urlencode({"url": article_url}).encode()
        req = urllib.request.Request(url, data=data, headers=headers)
        with urllib.request.urlopen(req) as response:
            return json.loads(response.read().decode())['data']['score']

    def get_scores_from_excel(self):
        # Read the Excel file
        df = pd.read_excel(self.filepath)
        # Get the 'URL' column
        urls = df['URL']
        # Get the score for each URL
        scores = [self.get_article_score(url) for url in urls]
        return scores

    def write_scores_to_excel(self):
        df = pd.read_excel(self.filepath)
        df['质量分'] = self.get_scores_from_excel()
        df.to_excel(self.filepath,index=False)

拓展:如何一次性查询超过100条记录?感兴趣的自己改改吧,提示:获取文章信息时,有一个"total": 194,每页最多100条。

2.12 一步完成

前面的代码还是有点臃肿的,可以在获取文章信息后,就查询出质量分,然后再把所有数据写入到excel。

这部分代码你自己实现吧。

2.13 完整代码

import urllib.request
import json
import pandas as pd
from openpyxl import Workbook, load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows


# 批量获取文章信息并保存到excel
class CSDNArticleExporter:
    def __init__(self, username, size, filename):
        self.username = username
        self.size = size
        self.filename = filename

    def get_articles(self):
        url = f"https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size={self.size}&businessType=blog&orderby=&noMore=false&year=&month=&username={self.username}"
        with urllib.request.urlopen(url) as response:
            data = json.loads(response.read().decode())
        return data['data']['list']

    def export_to_excel(self):
        df = pd.DataFrame(self.get_articles())
        df = df[['title', 'url', 'postTime', 'viewCount', 'collectCount', 'diggCount', 'commentCount']]
        df.columns = ['文章标题', 'URL', '发布时间', '阅读量', '收藏量', '点赞量', '评论量']
        # df.to_excel(self.filename)
        # 下面的代码会让excel每列都是合适的列宽,如达到最佳阅读效果
        # 你只用上面的保存也是可以的
        # Create a new workbook and select the active sheet
        wb = Workbook()
        sheet = wb.active
        # Write DataFrame to sheet
        for r in dataframe_to_rows(df, index=False, header=True):
            sheet.append(r)
        # Iterate over the columns and set column width to the max length in each column
        for column in sheet.columns:
            max_length = 0
            column = [cell for cell in column]
            for cell in column:
                try:
                    if len(str(cell.value)) > max_length:
                        max_length = len(cell.value)
                except:
                    pass
            adjusted_width = (max_length + 5)
            sheet.column_dimensions[column[0].column_letter].width = adjusted_width
        # Save the workbook
        wb.save(self.filename)


# 批量查询质量分
class ArticleScores:
    def __init__(self, filepath):
        self.filepath = filepath

    @staticmethod
    def get_article_score(article_url):
        url = "https://bizapi.csdn.net/trends/api/v1/get-article-score"
        headers = {
            "Accept": "...",
            "X-Ca-Key": "...",
            "X-Ca-Nonce": "...",
            "X-Ca-Signature": "...",
            "X-Ca-Signature-Headers": "x-ca-key,x-ca-nonce",
            "X-Ca-Signed-Content-Type": "multipart/form-data",
        }
        data = urllib.parse.urlencode({"url": article_url}).encode()
        req = urllib.request.Request(url, data=data, headers=headers)
        with urllib.request.urlopen(req) as response:
            return json.loads(response.read().decode())['data']['score']

    def get_scores_from_excel(self):
        # Read the Excel file
        df = pd.read_excel(self.filepath)
        # Get the 'URL' column
        urls = df['URL']
        # Get the score for each URL
        scores = [self.get_article_score(url) for url in urls]
        return scores

    def write_scores_to_excel(self):
        df = pd.read_excel(self.filepath)
        df['质量分'] = self.get_scores_from_excel()
        df.to_excel(self.filepath,index=False)


if __name__ == '__main__':
    # 获取文章信息
    exporter = CSDNArticleExporter(你的csdn id, 要查询的文章数量, 'score.xlsx')  # Replace with your username
    exporter.export_to_excel()
    # 批量获取质量分
    score = ArticleScores('score.xlsx')
    score.write_scores_to_excel()

2.2 python + html

思路:

  1. 用户输入:首先,我们需要获取用户的输入。在这个项目中,用户需要输入他们的CSDN用户名和他们想要获取的文章数量。我们使用HTML的<input>元素来创建输入框,让用户输入这些信息。

  2. 获取文章信息:当用户点击"Submit"按钮时,我们使用jQuery的$.getJSON()函数来发送一个GET请求到CSDN的API。这个API返回一个包含用户文章信息的JSON对象。我们从这个对象中提取出我们需要的信息,包括文章的标题、URL和分数。

  3. 获取文章分数:为了获取每篇文章的分数,我们需要发送一个POST请求到我们自己的服务器。我们的服务器会接收到这个请求,然后发送一个POST请求到CSDN的另一个API来获取文章的分数。这个API返回一个包含文章分数的JSON对象。我们的服务器将这个分数返回给前端。

  4. 显示结果:最后,我们在网页上显示获取到的文章信息。我们创建一个HTML表格,每行显示一篇文章的信息。我们使用jQuery的$.when.apply()函数来确保所有的POST请求都完成后再显示结果。这是因为POST请求是异步的,如果我们不等待所有的请求都完成,我们可能会在某些文章的分数还没有获取到时就显示结果。

2.21 在本地运行

先看效果: 这是兔老大的博客质量分

【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划


创建一个Flask应用,并定义一个路由’/',它对GET和POST请求做出响应。对于GET请求,它返回一个HTML表单。对于POST请求,它获取表单中的username和size,然后获取相应的文章,并将它们显示在屏幕上。

app.py:请求头的参数依旧是自己去获取

from flask import Flask, request, jsonify
from flask_cors import CORS
import urllib.request
import json

app = Flask(__name__)
CORS(app)

@app.route('/get_score', methods=['POST'])
def get_score():
    article_url = request.json['url']
    url = "https://bizapi.csdn.net/trends/api/v1/get-article-score"
    headers = {
        "Accept": "application/json, text/plain, */*",
        "X-Ca-Key": "...",
        "X-Ca-Nonce": "....",
        "X-Ca-Signature": "....",
        "X-Ca-Signature-Headers": "x-ca-key,x-ca-nonce",
        "X-Ca-Signed-Content-Type": "multipart/form-data",
    }
    data = urllib.parse.urlencode({"url": article_url}).encode()
    req = urllib.request.Request(url, data=data, headers=headers)
    with urllib.request.urlopen(req) as response:
        score = json.loads(response.read().decode())['data']['score']
    return jsonify(score=score)

if __name__ == '__main__':
    app.run(debug=True)

html 可视化:

这里我引用的是谷歌的在线JQuery,你如果打不开,可以使用其他的,比如:https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js

或者把它下载到本地。(我一直开着xxx,之前没注意这些网络问题😅)

<!DOCTYPE html>
<html>
<head>
    <title>CSDN Article Info</title>
    <style>
        body {
            font-family: Arial, sans-serif;
        }
        form {
            margin-bottom: 20px;
        }
        label {
            display: block;
            margin-top: 20px;
        }
        input, button {
            width: 100%;
            padding: 10px;
            margin-top: 5px;
            font-size: 18px;
        }
        button {
            background-color: #4CAF50;
            color: white;
            border: none;
            cursor: pointer;
        }
        button:hover {
            background-color: #45a049;
        }
        table {
            width: 100%;
            border-collapse: collapse;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }
        tr:nth-child(even) {
            background-color: #f2f2f2;
        }
        th {
            background-color: #4CAF50;
            color: white;
        }
    </style>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            $("#submit").click(function(event){
                event.preventDefault();
                var username = $("#username").val();
                var size = $("#size").val();
                var url = "https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=" + size + "&businessType=blog&orderby=&noMore=false&year=&month=&username=" + username;
                $.getJSON(url, function(data) {
                    var articles = data.data.list;
                    var promises = [];
                    for (var i = 0; i < articles.length; i++) {
                        (function(article) {
                            var promise = $.ajax({
                                url: "http://localhost:5000/get_score",
                                type: "POST",
                                data: JSON.stringify({url: article.url}),
                                contentType: "application/json; charset=utf-8",
                                dataType: "json"
                            }).then(function(data){
                                return "<tr><td>" + article.title + "</td>" +
                                       "<td><a href='" + article.url + "'>Link</a></td>" +
                                       "<td>" + data.score + "</td></tr>";
                            });
                            promises.push(promise);
                        })(articles[i]);
                    }
                    $.when.apply($, promises).then(function() {
                        var html = "<table><tr><th>Title</th><th>URL</th><th>Score</th></tr>";
                        for (var i = 0; i < arguments.length; i++) {
                            html += arguments[i];
                        }
                        html += "</table>";
                        $("#result").html(html);
                    });
                });
            });
        });
    </script>
</head>
<body>
    <form>
        <label for="username">CSDN ID:</label>
        <input type="text" id="username" name="username">
        <label for="size">Article number to query:</label>
        <input type="text" id="size" name="size">
        <button id="submit">Submit</button>
    </form>
    <div id="result"></div>
</body>
</html>


使用方法:

先运行app.py,再打开html即可。
【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划

也可以在命令行运行,先进入app.py所在的目录,地址栏输入cmd(powershell这些也可以),回车即可,我这个代码用的是conda虚拟环境,所以先进入虚拟环境:

conda activate first_env

然后运行app.py即可:

python app.py

【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划

最后打开html进行查询。

2.22 打打包成exe文件

我用的是conda的虚拟环境。

进入虚拟环境:

conda activate first_env

先在你目前的虚拟环境安装: pyinstaller

(只要进入这个虚拟环境,使用conda、pip都可以)

继续在命令行打包:

pyinstaller --onefile --paths=E:\anaconda3\envs\first_env\Lib\site-packages app.py

注意:

  • 前面的路径是我的python程序运行的虚拟环境(first_env),我在里面已经安装了相关的模块,比如flask;
  • 这个命令是在app.py所在目录下运行,并且是进入虚拟环境了。

打包完成后:在dist目录下即可找到这个exe文件。

打开如果显示缺失什么模块,那你就需要自己解决一下。

如果可以运行,那么就可以把这个exe移动到任意位置运行,比如我把他复制到桌面,然后双击打开即可运行。

然后浏览器打开Html就可以查询了。
【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划

2.23 部署到服务器

你也可以把它部署到服务器,以后直接用url即可打开查询页面。

感兴趣的自己部署吧。
【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件),python,python,flask,html,原力计划



~ 文章来源地址https://www.toymoban.com/news/detail-641530.html

到了这里,关于【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最前端|注意看!我用代码写了一个会动的3D地球

    目录 一、文章背景 二、实现方式 (一)方案 (二)实现细则 三、总结 在我们负责的某个项目中有一个需求,其展馆的可视化大屏首屏需要 3D 地球作为载体,来展示各国贸易额的信息,因此催生了 3D 地球的需求。需求的侧重点更多在于美观,动态方面,对于数据展示层面

    2024年02月09日
    浏览(50)
  • 通过Python+Selenium查询文章质量分

    通过Python+Selenium查询文章质量分 质量分查询地址 大家好,我是空空star,本篇给大家分享一下 《通过Python+Selenium查询文章质量分》 。 浏览器:本篇使用的是Chrome Chrome驱动版本:110.0.5481.77 Python版本:Python3.8 selenium版本: 4.8.2 Selenium基础篇之环境准备 import pprint import time fro

    2024年02月11日
    浏览(85)
  • 我用GPT-3.5写了一个关于C++排序的博客,大家看看和我手写的哪一个好

    手写版:你还不懂排序?那是你没看到这篇文章…_我爱OJ的博客-CSDN博客 以下内容来自GPT-3.5大模型: 目录 一、排序算法的基本概念 二、比较排序算法 1、冒泡排序 C++代码实现 2、选择排序 C++代码实现 3、插入排序 C++代码实现 4、希尔排序 C++代码实现 5、归并排序 C++代码实现

    2024年02月03日
    浏览(59)
  • 【python爬虫应用03】csdn个人所有文章质量分查询

    🛠️ 环境准备 在开始编写代码之前,我们需要进行一些环境准备。以下是所需的环境和库: 操作系统:Windows 编程语言:Python 3 编辑器:VSCode(可选) 安装所需的库: requests:用于发送HTTP请求 MultipartEncoder:用于构造POST请求的请求体 可以使用以下命令在命令行中安装这些

    2024年02月11日
    浏览(54)
  • 使用python制作一个批量查询搜索排名的SEO免费工具

    💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 最近工作中需要用上 Google SEO(搜索引擎优化),有了解过的朋友们应该都知道SEO必不

    2024年02月09日
    浏览(58)
  • [Selenium] 通过Java+Selenium查询文章质量分

    通过Java+Selenium查询文章质量分 通过Java+Selenium查询某个博主的Top40文章质量分 大家好,我是青花,本篇给大家分享一下《通过Java+Selenium查询文章质量分》。 浏览器:本篇使用的是Chrome Chrome浏览器版本:113 Chrome驱动版本:113(Java爬虫第一篇) Java版本:Jdk1.8 selenium版本: 4

    2024年02月10日
    浏览(48)
  • 小破站有许多“高质量”东西,怀揣着“学习”的目的,我用Python将它们通通采集下来

    前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 事情是这样的,昨晚室友拉着我去他的电脑,说带我欣赏一点高雅的作品~ 于是这一坐下,便是一晚上… 作为一个乐于分享的博主,本来我是决定直接分享的, 但是转念一想:有句俗话不是说授人以鱼不如授人以渔, 我还是

    2024年02月07日
    浏览(41)
  • 我用chatgpt写了一篇关于2023 it 行业的发展的论文……

    我用chatgpt写了一篇关于2023 it 行业的发展的论文。我将从以下几个方面来探讨2023年IT行业的发展: 1.云计算技术在IT行业的应用:随着云计算技术的发展,2023年IT行业将受益于云计算技术在数据存储、计算能力和安全性方面的优势。 2.大数据技术在IT行业的应用:大数据技术的

    2024年02月07日
    浏览(53)
  • [Selenium] 通过Java+Selenium查询某个博主的Top100文章质量分

    通过Java+Selenium查询文章质量分 通过Java+Selenium查询某个博主的Top40文章质量分 通过Java+Selenium查询某个博主的Top100文章质量分 大家好,我是青花,本篇给大家分享一下《通过Java+Selenium查询某个博主的Top100文章质量分》,针对上一章Top40文章,做了简单的优化,在查询博客质量

    2024年02月11日
    浏览(44)
  • 【python-致用】为嫖掘金月更奖品,我用刚学的python做了个批量文件内容替换

    前几天学习了python的文件读取操作,可以用来干点什么呢?嘿,正好很多平台都推出了博客月更活动,但由于不同的平台环境(如markdown语法差别、活动要求),每搬运一篇博客都要幸苦地进行一些 重复性的 手动修改,实在是麻烦。 人生苦短 ,我决定试试 python 能不能帮我

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包